首页 > 编程语言 > 详细

多线程编程-- part 4 线程间的通信

时间:2017-05-25 20:12:52      阅读:312      评论:0      收藏:0      [点我收藏+]

线程间的相互作用

  线程之间需要一些协调通信,来共同完成一件任务。

  Object类相关的方法:notify(),notifyAll(),wait()。会被所有的类继承,这些方法是final不能被重写。他们操控的是每个对象都会有的锁,如果不在synchronized里面调用wait,notify,notifyAll方法,运行时会报异常:要调用对象的这些方法,必须先获得这个对象的锁。

 

wait():

  使得当前线程必须等待,进入到等待序列,等到另外一个线程调用notify()或者notifyAll()激活

  当前线程必须拥有当前对象的monitor,就是锁。线程调用wait(),释放对锁的拥有权,等待另外的线程来通知他,这样才能重新获得锁的拥有权和恢复执行。

  要确保调用wait()方法的时候拥有锁。

  调用Object.wait()方法,会释放对象的锁。调用Thread.sleep()方法,不会释放对象的锁。

 

notify():

  唤醒一个等待当前对象的锁的线程,如果多个线程在等待,他们中的一个将会被选择唤醒,这种选择是随意的。

  被唤醒的锁是不能被执行的,必须要等到当前线程放弃这个对象的锁,被唤醒的线程和其他线程竞争锁。

 

一个线程拥有一个对象的锁有以下几种方法:

1.执行这个对象的synchronized实例方法

2.执行这个对象的synchronized语句块,这个语句块锁的是这个对象

3.对于class类的对象,执行那个类的synchronized static方法

多线程编程-- part 4 线程间的通信

原文:http://www.cnblogs.com/jijiji/p/6900994.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!