线程的互斥与同步通信
来源:互联网 发布:网络教育心理学专业 编辑:程序博客网 时间:2024/05/17 05:19
synchronized的使用和wait与notify实现线程间的通信
案例: 子线程循环10次, 主线程循环5次, 两者交替运行50次
代码
package thread;public class TraditionalThreadCommunication {public static void main(String[] args) {final Bussiness bussiness = new Bussiness();new Thread(new Runnable() {@Overridepublic void run() {for (int i = 1; i <= 50; i++) {bussiness.sub(i);}}}).start();for (int i = 1; i <= 50; i++) {bussiness.main(i);}}}class Bussiness {private boolean flag = true;public synchronized void sub(int j) {// 如果flag为false则等待while (!flag) {// 使用while 比较好 可以防止假唤醒try {this.wait();} catch (InterruptedException e) {e.printStackTrace();}}for (int i = 1; i <= 10; i++) {System.out.println("sub : " + i + " 第" + j + "次外循环");}// 将flag置为false 并唤醒主线程flag = false;this.notify();}public synchronized void main(int j) {// 如果flag为true则等待while (flag) {try {this.wait();} catch (InterruptedException e) {e.printStackTrace();}}for (int i = 1; i <= 5; i++) {System.out.println("main : " + i + " 第" + j + "次外循环");}// 将flag置为true 并唤醒子线程flag = true;this.notify();}}
将需要互斥的资源(属性和方法) 统一定义在一个类中, 而不是将互斥代码写到线程中, 这样做的好处是以后任何线程再访问资源类的时候就可以保证是线程安全的
注意: 使用notify()和notifyAll()方法的时候是不会释放锁资源的
阅读全文
0 0
- 线程的互斥与同步通信
- 线程的互斥与同步通信
- 黑马程序员-线程的互斥与同步通信
- 3.线程的同步互斥与通信
- 线程的互斥与同步通信-笔记整理3
- 多线程学习3-线程互斥与同步通信
- 进程/线程同步互斥与通信及socket传输
- BCB线程的互斥与同步
- 三线程的互斥与同步
- 线程的同步与互斥
- Windows线程的同步与互斥
- 线程同步与互斥的总结
- 线程的同步与互斥
- BCB线程的互斥与同步
- 线程间的同步与互斥
- JAVA线程的同步与互斥
- 线程的互斥与同步
- 线程的同步与互斥
- RCNN(Regions with Convolutional Neural Network Feature)
- 红黑树和AVL树的比较
- epoll模型讲解/源码分析
- 基于ajax的三层,实现数据库增删改查基础(五 前端界面其他功能的实现)
- HBase数据库
- 线程的互斥与同步通信
- Bug库____org.hibernate.HibernateException: No Session found for current thread
- 百度地图开发者平台API项目应用
- Android 使用Zxing实现二维码,横切竖屏预览扭曲变开的解决方法
- TCP异常处理(accept返回前连接中止)与SO_LINGER选项
- LeetCode
- mysql去除外网权限访问限制
- supervisor使用详解
- MySql的存储过程练习