多线程并发之线程间的通信,notify,wait
来源:互联网 发布:js判断ios android 编辑:程序博客网 时间:2024/05/18 01:47
1.需求:
子线程循环10次,主线程循环100次,这样间隔循环50次.
2.实现:
package com.amos.concurrent;/** * @ClassName: ThreadSynchronizedConnect * @Description: 用wait,notify实现线程间的通信,需求:子线程循环10次,主线程循环100次,这样间隔循环50次. * @author: amosli * @email:hi_amos@outlook.com * @date Apr 20, 2014 4:39:44 PM */public class ThreadSynchronizedConnect { public static void main(String[] args) { final Business business = new Business(); new Thread(new Runnable() { public void run() { for (int i = 0; i < 50; i++) { business.sub(i); } } }).start(); for (int i = 0; i < 50; i++) { business.main(i); } } /* * 经验:要用到共同数据(包括同步锁)的若干方法,应该归在同一个类身上,这样方便实现,高类聚和程序的健状性上. */ static class Business { private boolean is_sub = true; //子方法 public synchronized void sub(int i) { while (!is_sub) {//如果不为true,将等待,Blocked状态 try { this.wait(); } catch (InterruptedException e) { e.printStackTrace(); } } for (int j = 0; j < 10; j++) { System.out.println("sub thread:" + j + " loop:" + i); } is_sub=false; this.notify();//唤醒正在等待的线程 } //主方法 public synchronized void main(int i) { while (is_sub) { try { this.wait(); } catch (InterruptedException e) { e.printStackTrace(); } } for (int j = 0; j < 100; j++) { System.out.println("main thread:" + j + " loop:" + i); } is_sub=true; this.notify(); } }}
3.注解:
这里要注意的是如果要用到共同数据(包括同步锁)的若干方法,应该归在同一个类身上.
1).从线程的四种状态之间的转换图可能看到,将一个线程从可运行状态转为阻塞状态只需要调用wait()方法,即将线程加入到等待状态.
2).然后将等待中的状态唤醒只需要调用notify()方法即可,如果要唤醒所有等待中的线程,可以调用notifyall()方法.
3)使用synchronized关键字来同步方法,使其在运行时不受影响.
0 0
- 多线程并发之线程间的通信,notify,wait
- Java多线程/并发11、线程同步通信:notify、wait
- Java 多线程之线程间的通信——wait及notify方法
- Java 多线程之线程间的通信——wait及notify方法
- 多线程编程之线程间的通信——wait and notify
- 【Java多线程与并发库】04 传统的线程同步通信技术-synchronized/wait/notify/notifyAll
- 多线程间的通信 wait()、notify()、notifyAll()
- java多线程学习之线程通信-wait()等待 notify()唤醒
- 【Java并发编程】之十:使用wait/notify/notifyAll实现线程间通信的几点重要说明
- 【Java并发编程】之十:使用wait/notify/notifyAll实现线程间通信的几点重要说明
- 【Java并发编程】之十:使用wait/notify/notifyAll实现线程间通信的几点重要说明
- 【Java并发编程】之十:使用wait/notify/notifyAll实现线程间通信的几点重要说明
- java挑战高并发 之(10):使用wait/notify/notifyAll实现线程间通信的几点重要说明
- 【Java并发编程】之十:使用wait/notify/notifyAll实现线程间通信的几点重要说明(r)
- 【Java并发编程】之十:使用wait/notify/notifyAll实现线程间通信的几点重要说明
- Java并发编程之十三:使用wait/notify/notifyAll实现线程间通信的几点重要说明
- Java并发编程 线程通信wait notify
- 多线程编程入门(2):线程的通信(wait,notify)
- 幸福的真谛是平淡
- VC 中TEXT、_T、L的区别
- 嵌入式 linux中的jiffies变量小结
- php服务器端检查手机访问还是pc访问(并跳到不同页面)
- 理解 objc_msgSend 的角色
- 多线程并发之线程间的通信,notify,wait
- 炙手可热的12款网站模板推荐(免积分下载)
- 只有活在希望中,才会看到光明
- Java学习系列(十八)Java面向对象之基于UDP协议的网络通信
- Java_Annotation@符号
- linux学习 命令ll后字段的解释
- 享受人生
- java中属性的权限问题
- 浅谈onInterceptTouchEvent、onTouchEvent与onTouch