Skip to content
目录概览

Java 如何实现多线程之间的通讯和协作?

可以通过中断 和 共享变量的方式实现线程间的通讯和协作

比如说最经典的生产者-消费者模型:当队列满时,生产者需要等待队列有空间才能继续往里面放入商品,而在等待的期间内,生产者必须释放对临界资源(即队列)的占用权。因为生产者如果不释放对临界资源的占用权,那么消费者就无法消费队列中的商品,就不会让队列有空间,那么生产者就会一直无限等待下去。因此,一般情况下,当队列满时,会让生产者交出对临界资源的占用权,并进入挂起状态。然后等待消费者消费了商品,然后消费者通知生产者队列有空间了。同样地,当队列空时,消费者也必须等待,等待生产者通知它队列中有商品了。这种互相通信的过程就是线程间的协作。

  • Java中线程通信协作的最常见的两种方式:

    • syncrhoized加锁的线程的Object类的wait()/notify()/notifyAll()
    • ReentrantLock类加锁的线程的Condition类的await()/signal()/signalAll()
  • 线程间直接的数据交换:

    通过管道进行线程间通信

    • 字节流
    • 字符流