多线程编程-- 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 线程间的通信的主要内容,如果未能解决你的问题,请参考以下文章

《Java并发编程的艺术》读后笔记-part4

多线程编程学习三(线程间通信)

Java多线程编程核心技术读书笔记-线程通信

iOS开发多线程篇—线程间的通信

Java 多线程线程间的通信

4年工作经验,多线程间的5种通信方式都说不出来,你敢信?