- 浏览: 1572070 次
- 来自: 上海
文章分类
- 全部博客 (374)
- Java (101)
- Struts (54)
- Oracle (30)
- JavaScript (16)
- Spring (27)
- Hibernate (16)
- MyEclipse (3)
- JSF (1)
- FreeMarker (2)
- SiteMesh (2)
- JfreeChart (2)
- Ibatis (2)
- JSP (12)
- MyBatis (4)
- SWFupload (1)
- EJB (4)
- Jboss (4)
- WebService (2)
- Linux (16)
- Android (2)
- XML (6)
- Java 网络编程 (13)
- AXIS2 (1)
- FTP (1)
- Jswing (1)
- Socket (3)
- 杂文选集 (6)
- solr (2)
- PS (1)
- Tomcat (7)
- JDBC (9)
- Highcharts (1)
- maven (1)
- Nodejs (0)
- navicat (2)
- Exception (5)
- eclipse (3)
- jQuery (1)
- springMVC (4)
- MySQL (11)
- SVN (1)
- Sql Server (1)
- zookeeper (1)
- JVM (1)
- Groovy (2)
- Git (1)
- Nginx (1)
- DynamicReport (1)
- IDEA (2)
- JasperReports (1)
- Postgresql (2)
- Mac (1)
- gradle (1)
- 数据结构算法 (1)
最新评论
-
hpu145:
引用引用
java 千分位的添加和去除 -
被遗忘的下路:
少了个junit-4.8.2的包
SSH2整合完整案例(四十三) -
白天看黑夜:
java过滤emoji字符处理,希望能帮到你http://ww ...
emoji 表情图片解决方法 -
caipeiming:
这个挺好JavaScript实现input输入框控件只允许输入 ...
js 控制文本框只能输入中文、英文、数字等 -
双子树:
东西太好啦受教啊
Struts2 JSP中将list,set ,Map传递到Action然后<s:iterator>遍历(三十五)
import java.util.concurrent.locks.Condition; import java.util.concurrent.locks.Lock; import java.util.concurrent.locks.ReentrantLock; /** * Lock 类似 synchronize (让多个线程 执行任务的时候 相互不干扰,不被打断 :互斥) * Condition (让多个线程之间 进行 交流 :通信) * * 例子 : 老大 --> 老二 -->老三 --> 老大 --> 老二 -->老三 */ public class ThreeConditionCommunication2 { /** * @param args */ public static void main(String[] args) { // TODO Auto-generated method stub final Business bus=new ThreeConditionCommunication2().new Business(); new Thread( new Runnable(){ @Override public void run() { for (int j = 0; j < 5; j++) { bus.sub2(j); } } } ).start(); new Thread( new Runnable(){ @Override public void run() { for (int j = 0; j < 5; j++) { bus.sub3(j); } } } ).start(); for (int j = 0; j < 5; j++) { bus.sub1(j); } } //主要是这里不同 class Business{ Lock lock=new ReentrantLock(); Condition con1=lock.newCondition(); // 1 - 2 通信 Condition con2=lock.newCondition(); // 2 - 3 通信 int step=1; public void sub1(int i){ lock.lock(); try { while(step!=1) con1.await(); for (int j = 0; j < 100; j++) { System.out.println("main thread sequence of "+j+" loop of"+i); } step=2; con1.signal(); } catch (Exception e) { e.printStackTrace(); }finally{ lock.unlock(); } } public void sub2(int i){ lock.lock(); try { while(step!=2) con1.await(); for (int j = 0; j < 10; j++) { System.out.println("Sub2 thread sequence of "+j+" loop of"+i); } step=3; con2.signal(); } catch (Exception e) { e.printStackTrace(); }finally{ lock.unlock(); } } public void sub3(int i){ lock.lock(); try { while(step!=3) con2.await(); for (int j = 0; j < 20; j++) { System.out.println("Sub3 thread sequence of "+j+" loop of"+i); } step=1; con1.signal(); } catch (Exception e) { e.printStackTrace(); }finally{ lock.unlock(); } } } }
/** * Lock 类似 synchronize (让多个线程 执行任务的时候 相互不干扰,不被打断 :互斥) * Condition (让多个线程之间 进行 交流 :通信) * * 例子 :三个线程之间的互斥 和 通信 */ public class ThreeConditionCommunication { /** * @param args */ public static void main(String[] args) { // TODO Auto-generated method stub final Business bus=new ThreeConditionCommunication().new Business(); new Thread( new Runnable(){ @Override public void run() { for (int j = 0; j < 5; j++) { bus.sub2(j); } } } ).start(); new Thread( new Runnable(){ @Override public void run() { for (int j = 0; j < 5; j++) { bus.sub3(j); } } } ).start(); for (int j = 0; j < 5; j++) { bus.sub1(j); } } // 三个 Condition class Business{ Lock lock=new ReentrantLock(); Condition con1=lock.newCondition(); Condition con2=lock.newCondition(); Condition con3=lock.newCondition(); int step=1; public void sub1(int i){ lock.lock(); try { while(step!=1) con1.await(); for (int j = 0; j < 20; j++) { System.out.println("main thread sequence of "+j+" loop of"+i); } step=2; con2.signal(); } catch (Exception e) { e.printStackTrace(); }finally{ lock.unlock(); } } public void sub2(int i){ lock.lock(); try { while(step!=2) con2.await(); for (int j = 0; j < 10; j++) { System.out.println("Sub2 thread sequence of "+j+" loop of"+i); } step=3; con3.signal(); } catch (Exception e) { e.printStackTrace(); }finally{ lock.unlock(); } } public void sub3(int i){ lock.lock(); try { while(step!=3) con3.await(); for (int j = 0; j < 20; j++) { System.out.println("Sub3 thread sequence of "+j+" loop of"+i); } step=1; con1.signal(); } catch (Exception e) { e.printStackTrace(); }finally{ lock.unlock(); } } } }
发表评论
-
检测一个字符串是否在jvm的常量池中
2018-12-18 17:34 940public static boolean inPool( ... -
UTC时间, GMT时间 ,夏令时
2017-08-18 15:12 2226经常混淆于此,特地研究了一下,记录在此以备忘。 整个地 ... -
java 反射List
2017-02-18 01:58 5590package com.enhance.reflect; ... -
JDK1.5 Exchange 两个线程互换数据
2016-08-04 18:00 910import java.util.concurrent ... -
JDK1.5 CountDownLatch
2016-08-04 16:25 1016/* * 还有一个利用场景: ... -
java CyclicBarrier 循环障碍阻塞
2016-08-03 23:54 952//一个同步辅助类,它允许一组线程互相等待,直到到达某个公 ... -
java 信号灯 Semaphore
2016-08-03 23:53 1781更多介绍http://blog.csdn.net/java20 ... -
java 使用读写锁设计一个缓存模型
2016-08-03 23:49 1369import java.util.HashMap; ... -
java 读写锁
2016-08-03 23:46 776import java.util.Random; i ... -
jdk1.5 锁 Lock 和 Condition
2016-08-02 17:03 877// lock 练习 public class Lock ... -
JDK1.5 获取线程执行结果 Callable Future
2016-08-02 15:08 1129import java.util.Random; i ... -
JDK1.5 线程池
2016-08-02 14:48 763import java.util.concurrent ... -
java 多线程ThreadLocal
2016-08-02 00:13 1107import java.util.Random; ... -
java 定时器 Timer
2016-08-01 16:53 3843import java.util.Calendar; ... -
java 多线程同步+通信
2016-08-01 16:48 923/** *父子线程 交替打印10 次, 100次 ... -
java 线程同步
2016-08-01 16:43 976import java.util.concurrent.l ... -
java多线程练习
2016-08-01 16:35 1796Java 传统多线程 Java 多线程同步 Java 多线 ... -
java 传统多线程
2016-08-01 16:34 963/** * 传统多线程 */ public ... -
java 图片,剪切,缩放
2016-01-06 10:21 2172package out; import ja ... -
java术语(PO/POJO/VO/BO/DAO/DTO)
2014-11-27 11:45 1939PO(persistant object) 持久 ...
相关推荐
java 多线程 其实就是每个线程都拥有自己的内存空间,多线程之间的通信,比例A线程修改了主内存(main方法的线程)变量,需要把A线程修改的结果同步到主线程中,这时B线程再从主线程获取该变量的值,这样就实现了...
java多线程每个线程挨着打印ABC的4种实现方式,有4个线程t1、t2、t3、t4,t1打印A后t2打印A再t3打印A再t4打印A,然后从新回到t1打印B再t2打印B...t4打印B... 4个线程轮流打印abc... 一个线程可以理解为一个人,打印...
主要介绍了Java的线程同步以及线程间通信,多线程编程是Java学习中的重点和难点,需要的朋友可以参考下
多个线程操作共享对象导致的状态不一致问题 原因 共享资源的竞态条件问题 问题 竞态条件 指令重排序 工作内存中主内存同步延迟 解决 要有安全策略文档或注释 不共享 线程封闭 仅在单线程内访问数据 栈...
同步(Synchronization):同步是控制多个线程访问共享资源的方式,以防止数据不一致和竞态条件。Java提供了多种同步机制,包括synchronized关键字、Lock接口和Semaphore类。 线程间通信(Inter-Thread ...
当多个线程访问同一个对象时,如果不用考虑这些线程在运行环境下的调度和交替运行,也不需要进行额外的同步,或者在调用方进行任何其他的协调操作,调用这个对象的行为都可以获取正确的结果,那么这个对象时线程的 ...
本篇文章提供了20道高难度的Java多线程编程面试题及详细解析,旨在帮助开发者展示出卓越的并发编程能力。在当今高并发的应用场景下,对多线程编程的理解和应用是评估面试者的重要指标。通过这些高难度问题,您将全面...
进程在执行过程中拥有独立的内存单元,而多个线程共享内存,线程之间的通信比较容易解决,从而极大地提高了程序的运行效率。 在基于线程的多任务环境中,最小的可调度代码单元是线程,这意味着单个程序可以同时执行...
一个进程中的线程共享相同的内存单元/内存地址空间à可以访问相同的变量和对象,而且它们从同一堆中分配对象à通信、数据交换、同步操作 由于线程间的通信是在同一地址空间上进行的,所以不需要额外的通信机制...
在并发编程中,需要处理两个关键问题:线程之间如何通信及线程之间如何同步(这里的线程是指并发执行的活动实体)。通信是指线程之间以何种机制来交换信息。在命令式编程中,线程之间的通信机制有两种:共享内存和...
a)继承Thread,那么我们可以创建很多个这样的类,但是每个这样的类都是相互不关联的,也是说我们Thread类中的内容每个创建出来的类都有一份,因此它不适合作为数据共享的线程来操作。同时由于Java继承的性,我们...
本题目的研究内容包括以下几个方面:首先,研究Java多线程技术,包括线程的创建、同步、通信等机制,以及线程安全的概念和实现方法。然后,研究Http协议,包括Http请求和响应的格式、状态码等,以及如何利用Http协议...
7、 浅析 Java Thread.join() : java多线程实现主线程等待所有子线程执行完毕 16 8、 线程运行中抛出异常的处理 19 9、 Callable 有返回值的线程 20 10、 Callable结合FutureTask的多线程使用(免打扰模式) 24
该文档是笔者在学习李刚老师《Java疯狂讲义》中有关多线程的用法而总结出来的笔记,其中主要的内容包括线程创建和启动、线程的生命周期、控制线程、线程同步、线程通信线程池等基本内容。对Java多线程有详细的介绍。...
使用线程池线程的调度线程的生命周期线程同步1. 方法一:同步代码块2. 方法二:同步方法3. 方法三:Lock(锁):4. 对比三种方法5. 典型例题6. 线程死锁问题线程通信两个方法sleep()方法和wait()典型例题 读完本文...
研究了程序并发过程中的同步机制和交互通信机制,比较了基于操作系统级和基于Java多线程级并发机制的实现结构,总结了并发程序中死锁预防的一些编程规则和策略。所构造的一个具有完全意义上的并发同步的框架实例有...
一、重点知识 isDaemon 判断是否为守护线程。 run方法是不能用synchronized修饰,他是继承来的,不能改变其结构,...stringBuffer中的同步方法,都是非静态的,因为共用一个this锁就可以了,线程进去调用他的一个方法
在并发编程领域,有两大核心问题:一个是互斥,即同一时刻只允许一个线程访问共享资源;另一个是同步,即线程之间如何通信、协作。 主要原因是,对于多线程实现实现并发,一直以来,多线程都存在2个问题: ● 线程...
从多线程的基础、线程同步、线程间通信、线程调度、线程池、并发容器、线程安全的集合、原子变量等方面去罗列主要知识点,以思维导图的方式进行呈现,可以让读者更条理清晰的在最短的时间内掌握多线程的主要知识
javax.swing.plaf.multi 提供了组合两个或多个外观的用户界面对象。 javax.swing.plaf.synth Synth 是一个可更换皮肤 (skinnable) 的外观,在其中可委托所有绘制。 javax.swing.table 提供用于处理 javax.swing....