网创优客建站品牌官网
为成都网站建设公司企业提供高品质网站建设
热线:028-86922220
成都专业网站建设公司

定制建站费用3500元

符合中小企业对网站设计、功能常规化式的企业展示型网站建设

成都品牌网站建设

品牌网站建设费用6000元

本套餐主要针对企业品牌型网站、中高端设计、前端互动体验...

成都商城网站建设

商城网站建设费用8000元

商城网站建设因基本功能的需求不同费用上面也有很大的差别...

成都微信网站建设

手机微信网站建站3000元

手机微信网站开发、微信官网、微信商城网站...

建站知识

当前位置:首页 > 建站知识

浅谈java多线程wait,notify

前言

成都创新互联公司主要从事成都网站设计、成都网站建设、网页设计、企业做网站、公司建网站等业务。立足成都服务大城,十余年网站建设经验,价格优惠、服务专业,欢迎来电咨询建站服务:18980820575

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;
}
@Override
public 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");
else
shareEntity.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;
}
@Override
public 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();
}
}
}
}

请求

@RequestMapping("test-communication")
public void testCommunication() {
ShareEntity shareEntity = new ShareEntity();
CommunicationThread1 thread1 = new CommunicationThread1(shareEntity);
CommunicationThread2 thread2 = new CommunicationThread2(shareEntity);
thread1.start();
thread2.start();
}

结果

thread1-set-name-0
thread1-set-name-1
thread1-set-name-0
thread1-set-name-1
thread1-set-name-0
thread1-set-name-1
thread1-set-name-0

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持创新互联。


文章题目:浅谈java多线程wait,notify
网站地址:http://bjjierui.cn/article/gpiecd.html

其他资讯