传统线程通讯执行过程中的通信是通过Object类的wait()、notify()、notifyAll()方法来实现的,下面我们通过一个案例来学习一下这些方法。
案例:
假设现在存在两个线程,主线程main与一个子线程,首先子线程执行5次,然后切换到主线程执行10次,再切换至子线程执行5次,主线程执行10次,如此各循环3次。
程序代码如下:
/** * * @author 吖大哥 * @date May 24, 2014 5:08:12 PM */ public class ConditionTest { public static void main(String[] args) { final Business2 b = new Business2(); // 启动线程1 执行20次 new Thread(new Runnable() { public void run() { for (int i = 0; i < 3; i++) { b.sub1(i); } } }).start(); for (int i = 0; i < 3; i++) { b.main2(i); } } } class Business2 { private boolean action = true; public synchronized void sub1(int once) { while (!action) {// try { this.wait(); } catch (InterruptedException e) { e.printStackTrace(); } } for (int i = 0; i < 5; i++) { System.out.println("Sub1 " + once + " runing *********" + i); } action = false; this.notify(); } public synchronized void main2(int once) { while (action) {// try { this.wait(); } catch (InterruptedException e) { e.printStackTrace(); } } for (int i = 0; i < 10; i++) { System.out.println("Main2 " + once + " runing *********" + i); } action = true; this.notify(); } }
输出结果:
Sub1 0 runing *********0 Sub1 0 runing *********1 Sub1 0 runing *********2 Sub1 0 runing *********3 Sub1 0 runing *********4 Main2 0 runing *********0 Main2 0 runing *********1 Main2 0 runing *********2 Main2 0 runing *********3 Main2 0 runing *********4 Main2 0 runing *********5 Main2 0 runing *********6 Main2 0 runing *********7 Main2 0 runing *********8 Main2 0 runing *********9 Sub1 1 runing *********0 Sub1 1 runing *********1 Sub1 1 runing *********2 Sub1 1 runing *********3 Sub1 1 runing *********4 Main2 1 runing *********0 Main2 1 runing *********1 Main2 1 runing *********2 Main2 1 runing *********3 Main2 1 runing *********4 Main2 1 runing *********5 Main2 1 runing *********6 Main2 1 runing *********7 Main2 1 runing *********8 Main2 1 runing *********9 Sub1 2 runing *********0 Sub1 2 runing *********1 Sub1 2 runing *********2 Sub1 2 runing *********3 Sub1 2 runing *********4 Main2 2 runing *********0 Main2 2 runing *********1 Main2 2 runing *********2 Main2 2 runing *********3 Main2 2 runing *********4 Main2 2 runing *********5 Main2 2 runing *********6 Main2 2 runing *********7 Main2 2 runing *********8 Main2 2 runing *********9
相关推荐
vc++ 多线程教程---线程通信--利用事件对象,线程同步--使用信号量,线程同步--使用互斥量,线程同步--使用临界区
Java多线程--等待所有子线程执行完的五种方法 Java多线程--等待所有子线程执行完的五种方法 Java多线程--等待所有子线程执行完的五种方法 Java多线程--等待所有子线程执行完的五种方法 Java多线程--等待所有子线程...
java多线程按需交替执行,java新特性。
多线程编程系列。使用事件进行线程间的通讯。一个不错的实例代码。
多线程学习笔记,通过平时的学习所做的一些笔记,希望对广大同仁有所帮助
工作者线程没有消息机制,通常用来执行后台计算和维护任务,如冗长的计算过程,打印机的后台打印等。用户界面线程一般用于处理独立于其他线程执行之外的用户输入,响应用户及系统所产生的事件和消息等。但对于Win...
Java线程:线程名称的设定及获取 10 Java线程:线程栈模型与线程的变量 12 Java线程:线程的调度-休眠 13 Java线程:线程的调度-优先级 16 Java线程:线程的调度-让步 19 Java线程:线程的调度-合并 22 Java线程:...
qt 多线程------- 串口通信 object 继承方式 配合我文章
线程----BlockingQueue 的介绍说明
精灵线程(Daemon)或守护线程---马克-to-win java视频
java线程学习笔记
利用一个小型游戏的服务器和客服端之间的信息通信来介绍多线程之间的信息通信,以及通信可能存在的危险。
php curl 多线程实现-php程序员的笔记
Java多线程--让主线程等待所有子线程执行完毕
day06 【异常、线程】-笔记.pdf
线程安全就是对共享的、可变的状态进行管理,对象的状态就是它的数据,换句话说就是在不可控制的并发访问中保护数据。
Visual C#中的多线程编程 - c#(csharp).htmVisual C#中的多线程编程 - c#(csharp).htmVisual C#中的多线程编程 - c#(csharp).htmVisual C#中的多线程编程 - c#(csharp).htmVisual C#中的多线程编程 - c#(csharp)....
多线程编程-监控线程
java多线程学习-ftp上传
L17-线程间通信-讲义.pdf