文档章节

java线程间通讯 notify wait

偶尔诗文
 偶尔诗文
发布于 2016/05/12 16:13
字数 235
阅读 35
收藏 6

wait代码:

public class WaitClass extends Thread{
    private List<Integer> list;
    private byte[] lock;

    public WaitClass(List list,byte[] lock){
        this.list = list;
        this.lock = lock;
    };

    public void run() {
         synchronized (lock){
             System.out.println("进入wait方法");
                 try {
                     lock.wait();
                 } catch (InterruptedException e) {
                     e.printStackTrace();
                 }
            System.out.println("走出wait方法");
         }
    }
}

notify代码:

public class NotifyClass extends Thread{
    private List list;
    private byte[] lock;

    public NotifyClass(List list,byte[] lock){
        this.list = list;
        this.lock = lock;
    }

    public void run() {
        synchronized (lock){
            for(int i=0;i<10;i++){
                list.add(i);
                try {
                    Thread.currentThread().sleep(2000);
                } catch (InterruptedException e) {
                    e.printStackTrace();
                }
                if(list.size()==5){
                    lock.notify();
                }
                System.out.println("notify" + i);
            }
        }
    }
}

执行代码:

public class MainClass {
    public static void main(String[] args){
        byte[] lock = new byte[0];
        List list = new ArrayList();
        NotifyClass notifyClass = new NotifyClass(list,lock);
        final WaitClass waitClass = new WaitClass(list,lock);
        waitClass.start();
        System.out.println("执行");
        notifyClass.start();
    }
}

结果:

执行
进入wait方法
notify0
notify1
notify2
notify3
notify4
notify5
notify6
notify7
notify8
notify9
走出wait方法
 

说明:

  1. wait,notify必须要在synchronized中使用
  2. notify只能唤醒拥有相同锁的wait
  3. 只有执行完notifysynchronized代码块中的代码之后,才能执行被唤醒的wait的方法

© 著作权归作者所有

共有 人打赏支持
偶尔诗文
粉丝 9
博文 139
码字总数 61297
作品 0
沈阳
高级程序员
Java多线程学习(四)等待/通知(wait/notify)机制

系列文章传送门: Java多线程学习(一)Java多线程入门 Java多线程学习(二)synchronized关键字(1) java多线程学习(二)synchronized关键字(2) Java多线程学习(三)volatile关键字 Ja...

一只蜗牛呀
04/16
0
0
java并发编程(2)——wait和notify解析

JAVA的进程同步是通过synchronized()来实现的,需要说明的是,JAVA的synchronized()方法类似于操作系统概念中的互斥内存块,在JAVA中的Object类型中,都是带有一个内存锁的,在有线程获取该内...

十二缸帕萨特
2014/04/12
0
0
Core Java基础知识之一(线程私房菜)

Java的高明之处就是在于不断的总结实际应用中不断出现的通用问题,为此提供此类问题的底层实现,向调用者提供解决问题的接口实现,调用者大可不必完全的明白底层的实现原理和实现过程,只要照...

保罗的寓言
2011/05/21
0
0
多线程编程学习三(线程间通信).

一、概要 线程是操作系统中独立的个体,但这些个体如果不经过特殊的处理就不能成为一个整体,线程间的通信就是成为整体的必用方案之一。可以说,使线程进行通信后,系统之间的交互性会更强大...

jmcui
2017/09/12
0
0
wait、notify、notifyAll

wait()、notify()、notifyAll()是三个定义在Object类里的方法,可以用来控制线程的状态。 这三个方法最终调用的都是jvm级的native方法。随着jvm运行平台的不同可能有些许差异。 如果对象调用...

milne
2015/08/18
0
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

SpringCloud SpringBoot mybatis分布式Web应用的统一异常处理

我们在做Web应用的时候,请求处理过程中发生错误是非常常见的情况。Spring Boot提供了一个默认的映射:/error,当处理中抛出异常之后,会转到该请求中处理,并且该请求有一个全局的错误页面用...

itcloud
21分钟前
0
0
c++ std::bind和std::function

定义于头文件 <functional> std::bind 函数绑定,https://zh.cppreference.com/w/cpp/utility/functional/bind // bind 用例#include <iostream>#include <functional> // 自定义的一......

SibylY
23分钟前
0
0
SecureCRT的安装与破解(过程很详细!!!)

SecureCRT的安装与破解(过程很详细!!!) SecureCRT的安装与破解(过程很详细!!!) 使用SecureCRT可以方便用户在windows环境下对linux主机进行管理,这里为大家讲一下SecureCRT的破解方...

DemonsI
28分钟前
0
1
介绍几款可用的web应用防火墙

目前有两款,基于软件和基于应用程序的web应用防火墙。基于软件的产品布置在Web服务器上,而基于应用程序的产品放置在Web服务器和互联网接口之间。两种类型的防火墙都会在数据传入和传出web...

上树的熊
35分钟前
1
0
用Visual Studio开发以太坊智能合约

区块链和以太坊 自从我熟悉区块链、以太坊和智能合约以来,一直失眠。 我一直在阅读,阅读和阅读,最后我能够使用一些工具,他们建议使用以太坊网站官方客户端应用程序(Ethereum Wallet)也...

geek12345
36分钟前
1
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部