时间:2021-05-19
前言
1.因为涉及到对象锁,Wait、Notify一定要在synchronized里面进行使用。
2.Wait必须暂定当前正在执行的线程,并释放资源锁,让其他线程可以有机会运行
3.notify/notifyall: 唤醒线程
共享变量
public class ShareEntity {private String name;// 线程通讯标识private Boolean flag = false;public ShareEntity() {}public String getName() {return name;}public void setName(String name) {this.name = name;}public Boolean getFlag() {return flag;}public void setFlag(Boolean flag) {this.flag = flag;}}线程1(生产者)
public class CommunicationThread1 extends Thread{private ShareEntity shareEntity;public CommunicationThread1(ShareEntity shareEntity) {this.shareEntity = shareEntity;}@Overridepublic void run() {int num = 0;while (true) {synchronized (shareEntity) {if (shareEntity.getFlag()) {try {shareEntity.wait();} catch (InterruptedException e) {e.printStackTrace();}}if (num % 2 == 0)shareEntity.setName("thread1-set-name-0");elseshareEntity.setName("thread1-set-name-1");num++;shareEntity.setFlag(true);shareEntity.notify();}}}}线程2(消费者)
public class CommunicationThread2 extends Thread{private ShareEntity shareEntity;public CommunicationThread2(ShareEntity shareEntity) {this.shareEntity = shareEntity;}@Overridepublic void run() {while (true) {synchronized (shareEntity) {if (!shareEntity.getFlag()) {try {shareEntity.wait();} catch (InterruptedException e) {e.printStackTrace();}}System.out.println(shareEntity.getName());shareEntity.setFlag(false);shareEntity.notify();}}}}请求
结果
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。
声明:本页内容来源网络,仅供用户参考;我单位不保证亦不表示资料全面及准确无误,也不保证亦不表示这些资料为最新信息,如因任何原因,本网内容或者用户因倚赖本网内容造成任何损失或损害,我单位将不会负任何法律责任。如涉及版权问题,请提交至online#300.cn邮箱联系删除。
使用wait()和notify()实现Java多线程通信:两个线程交替打印A和B,如ABABABpublicclassTest{publicstaticvoid
本文实例为大家分享了java实现多线程交替打印的具体代码,供大家参考,具体内容如下notify+wait实现importorg.junit.Test;impor
前言在Java中使用线程的时候肯定会有线程挂起的这种情况出现,在Java中提供了3种方式:suspend/resume、wait/notify,notifyAl
今天重温了下java多线程中的notify()方法以及wait()方法,一时兴起,决定通过这俩个方法,实现一个简易的自定义阻塞队列。阻塞队列是什么,与普通队列的
java中控制线程通信的方法1.传统的方式:利用synchronized关键字来保证同步,结合wait(),notify(),notifyAll()控制线程通信