java 多线程 wait,notify

栏目: Java · 发布时间: 7年前

内容简介:thread1-set-name-0thread1-set-name-1thread1-set-name-0
  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


以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,也希望大家多多支持 码农网

查看所有标签

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。

科学的极致:漫谈人工智能

科学的极致:漫谈人工智能

集智俱乐部 / 人民邮电出版社 / 2015-7 / 49.00元

集智俱乐部是一个从事学术研究、享受科学乐趣的探索者组成的团体,倡导以平等开放的态度、科学实证的精神进行跨学科的研究与交流,力图搭建一个中国的“没有围墙的研究所”。这些令人崇敬的、充满激情与梦想的集智俱乐部成员将带你了解图灵机模型、冯•诺依曼计算机体系结构、怪圈与哥德尔定理、通用人工智能、深度学习、人类计算与自然语言处理,与你一起展开一场令人热血沸腾的科学之旅。一起来看看 《科学的极致:漫谈人工智能》 这本书的介绍吧!

RGB转16进制工具
RGB转16进制工具

RGB HEX 互转工具

URL 编码/解码
URL 编码/解码

URL 编码/解码

Markdown 在线编辑器
Markdown 在线编辑器

Markdown 在线编辑器