java经典面试题之多线程通讯方式

简单整理下,后续进行更新。。。。。

java多线程通讯一般实现起来有如下几种方式:

一、传统线程通信synchronized + wait + notify

Object类的wait()、notify() 、notifyAll()三个方法必须由同步监视器对象来调用,分两种情况:

a)同步方法,该类默认实例(this)就是同步监视器,可以在同步方法中可以直接调用

b)同步代码块,同步监视器是synchronized后括号里的对象,所以必须使用此对象调用这三个方法

二、使用Condition控制线程通信lock + condition + await + signal

Lock代替同步方法或同步代码块,Condition替代同步监视器的功能。

private final Lock lock = newReentrantLock();

private final Condition con =lock.newCondition();

lock.lock();   con.await();    con.signalAll();    lock.unlock():

三、使用阻塞队列(BlockingQueue)控制线程通信

BlockingQueue接口主要作为线程同步的工具。当生产者试图向BlockingQueue中放入元素,如果队列已满,则线程被阻塞;当消费者试图向BlockingQueue中取出元素时,若该队列已空,则线程被阻塞。

发布了81 篇原创文章 · 获赞 29 · 访问量 2万+

猜你喜欢

转载自blog.csdn.net/breakout_alex/article/details/105465112