Java知多少(63)Java线程间通信信

在java中,每个对象都有两个池,锁池(monitor)和等待池(waitset),每个对象又都有wait、notify、notifyAll方法,使用它们可以实现线程之间的通信,只是平时用的较少.

wait(): 使当前线程处于等待状态,直到另外的线程调用notify或notifyAll将它喚醒

锁池: 假设T1线程已经拥有了某个对象(注意:不是类)的锁,而其它的线程想要调用该对象的synchronized方法(或者synchronized块),由于这些线程在进入对象的synchronized方法之前都需要先获得该对象的锁的拥有权,但是该对象的锁目前正被T1线程拥有,所以这些线程就进入了该对象的锁池中.


假设T1线程调用了某个对象的wait()方法,T1線程就会释放该对象的锁(因为wait()方法必须出现在synchronized中,这样自然在执行wait()方法之前T1线程就已经拥有了该对象的锁),同时T1线程进入到了该对象的等待池Φ.如果有其它线程调用了相同对象的notifyAll()方法,那么处于该对象的等待池中的线程就会全部进入该对象的锁池中,从新争夺锁的拥有权.如果另外的┅个线程调用了相同对象的notify()方法,那么仅仅有一个处于该对象的等待池中的线程(随机)会进入该对象的锁池.

java实现Java线程间通信信的四种方式

1、synchronized同步:这种方式本质上就是“共享内存”式的通信。多个线程需要访问同一个共享变量谁拿到了锁(获得了访问权限),谁就可以执行

2、while轮询:其实就是多线程同时执行,会牺牲部分CPU性能

4、管道通信:管道流主要用来实现两个线程之间的二进制数据的传播

你对这个回答的评价是?

Copyright ? Java知识分享网 南通小锋网络科技囿限公司 版权所有 联系站长:

免责声明:网站所有作品均由会员网上搜集共同更新仅供读者预览及学习交流使用,下载后请24小时内删除如果喜欢请购买正版资源!原作者如果认为本站侵犯了您的版权,请QQ告知,我们会立即删除!

Java多线程间的通信

Java还提供了一种Java线程间通信信的机制这种通信通什么实现?

线程有四种状态任何一个线程肯定处于这四种状态中的一种:

1) 产生(New):线程对象已经产生,但尚未被启动所以无法执行。如通过new产生了一个线程对象后没对它调用start()函数之前

2) 可执行(Runnable):每个支持多线程的系统都有一个排程器,排程器会从线程池中选择一个线程并启动它当一个线程处于可执行状态时,表示它可能正处于线程池中等待排排程器启动它;也可能它已正在执行如执行了一个线程对象的start()方法后,线程就处于可执行状态但显而易见的是此时线程不一定正在执行中。

3) 死亡(Dead):当┅个线程正常结束它便处于死亡状态。如一个线程的run()函数执行完毕后线程就进入死亡状态

4) 停滞(Blocked):当一个线程处于停滞状态时,系統排程器就会忽略它不对它进行排程。

你对这个回答的评价是

我要回帖

更多关于 Java线程间通信 的文章

 

随机推荐