首页 > 代码库 > 多线程编程-- part 4 线程间的通信
多线程编程-- part 4 线程间的通信
线程间的相互作用
线程之间需要一些协调通信,来共同完成一件任务。
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 线程间的通信
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。