多线程编程-- part 4 线程间的通信
Posted jiguojing
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了多线程编程-- 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 线程间的通信的主要内容,如果未能解决你的问题,请参考以下文章