JavaSE---多线程---线程通信
1、概述
1.1 由于多线程之间共享父进程的资源,可以非常方便的共享数据,这才是多个线程通信的最好方式;
当然Java也提供了协调线程运行的支持;
1.2 线程的执行具有随机性,在实际业务中,比如有2个线程:一个是取款者、一个是存款者,要求存款者、取款者不断执行存取操作,但是要求:存款者或者取款者不能连续执行操作,只能存款者存款后,取款者才能取款;
需要借助Object类的wait()、notify()、notifyAll(),要求:这3个方法必须由 同步监视器对象 调用;
1.1.1 同步方法:
因为同步方法的同步监视器为this,可直接调用3个方法;
1.1.2 同步代码块:
由同步监视器调用;
wait():
导致当前线程处于阻塞状态,直到其他线程调用该线程的同步监视器的notify(),才将该线程唤醒;
notify():
唤醒在此同步监视器上等待的单个线程,如果存在多个,则随机唤醒其中一个;
notifyAll():
唤醒在此同步监视器上等待的所有线程;
1.3 如何实现线程通信:
前2种可以认为是 线程之间协同允许的控制策略;
通常没有必要使用管道流进行线程之间通信,多个线程共享父进程的资源,这样的方式才是线程通信的最好方式;
1.2.1 使用synchronized实现的同步(同步代码块、同步方法):
使用同步监视器对象调用Object的3个方法实现;
1.2.2 使用同步锁实现的同步:
由于同步锁不存在同步监视器,也就不能使用Object的3个方法;
Java提供了一个Condition类的3个方法:await()、signal()、signalAll()
1.2.3 使用管道流:
最新文章
- loadrunner性能测试---添加windows多台压力机
- iOS 代理反向传值
- php-工厂模式(转)
- C#自定义控件:WinForm将其它应用程序窗体嵌入自己内部【转载】
- Java设计模式--单列设计模式
- CSS3前缀
- HUNNU11342:Chemistry(模拟)
- Fuel 5.1安装openstack I版本号环境
- install font
- LeetCode 81. Search in Rotated Sorted Array II(在旋转有序序列中搜索之二)
- 学习Layui 第一天
- iis7 绑定多个ssl证书
- linux vg lv pv
- python 3.5 连接mysql数据库
- noip第15课资料
- 理解 Redis(6) - List 值
- Oracle存储过程和自定义函数笔记
- 【SPOJ METEORS】 Meteors
- mysql开发常用小结
- 【Java】PreparedStatement VS Statement