文档章节

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的方法

© 著作权归作者所有

共有 人打赏支持
偶尔诗文
粉丝 10
博文 142
码字总数 63744
作品 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
wait、notify、notifyAll

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

milne
2015/08/18
0
0
多线程编程学习三(线程间通信).

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

jmcui
2017/09/12
0
0

没有更多内容

加载失败,请刷新页面

加载更多

白话SpringCloud | 第十章:路由网关(Zuul)进阶:过滤器、异常处理

前言 简单介绍了关于Zuul的一些简单使用以及一些路由规则的简单说明。而对于一个统一网关而言,需要处理各种各类的请求,对不同的url进行拦截,或者对调用服务的异常进行二次处理等等。今天,...

oKong
13分钟前
1
0
详解nohup和& 区别

详解nohup和& 区别 2017年11月29日 16:57:38 King-Long 阅读数:7266 版权声明:本文为博主原创文章,欢迎转载。 https://blog.csdn.net/u011095110/article/details/78666833 nohup 一、【解...

linjin200
25分钟前
2
0
Character的static方法

基本类型char的包装类是Character,使用的比较多,大家是比较熟悉的。 我只是觉得里面有很多static方法,平时不怎么用,学习一下怎么实现的,或许日后就用到了。 static int compare(char x,...

woshixin
25分钟前
1
0
正则介绍_sed

10月17日任务 9.4/9.5 sed sed工具 匹配打印 -n 只打印匹配行,不然其他行也会打印出来 p 打印(配合-n使用) [root@centos7 tmp]# sed -n '/root/'p passwd root:x:0:0:root:/root:/bin/ba...

robertt15
25分钟前
2
0
轻松解码类似eval(function(p,a,c,k,e,d){}))的JavaScript代码

轻松解码类似eval(function(p,a,c,k,e,d){}))的JavaScript代码 2013年05月22日 15:18:05 秋实先生 阅读数:14826 这里解码百度访问统计代码构造函数为示例: 百度访问统计代码JavaScript源码:...

_纵横捭阖_
34分钟前
3
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部