文档章节

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
博文 145
码字总数 63966
作品 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
wait、notify、notifyAll

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

milne
2015/08/18
0
0
Core Java基础知识之一(线程私房菜)

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

保罗的寓言
2011/05/21
0
0
关于wait()和notify()

1.wait()和notify()的涉及初衷是为了解决线程之间通讯的问题,他们都是java.lang.Object的三个方法。Java通过内建的等待机制来允许线程在等待信号的时候变为非运行状态。 2.为了调用wait()或...

夕水溪下
2013/06/04
0
0

没有更多内容

加载失败,请刷新页面

加载更多

git常用命令

1.查看远程仓库地址 git remote -v 2.创建本地分支 git branch 分支 3.切换分支 git checkout 分支 4.把分支放到远程 git push origin 分支 5.查看本地分支 git branch 6. 查看本地和远程分支...

熊小熊会写代码哦
5分钟前
1
0
离屏Canvas — 使用Web Worker提高你的Canvas运行速度

现在因为有了离屏Canvas,你可以不用在你的主线程中绘制图像了! Canvas 是一个非常受欢迎的表现方式,同时也是WebGL的入口。它能绘制图形,图片,展示动画,甚至是处理视频内容。它经常被用...

嫣然丫丫丫
6分钟前
1
0
SpringBoot 整合 BeetlSQL

SpringBoot 整合 BeetlSQL 1. beetlsql介绍 BeetSql是一个全功能DAO工具, 同时具有Hibernate 优点 & Mybatis优点功能,适用于承认以SQL为中心,同时又需求工具能自动能生成大量常用的SQL的应...

Jeff_Regan
7分钟前
1
0
UNIGUI-DBGRID的统计行的使用

关键步骤: 1、设置DBGRID的summary.enabled:=true 2、打开DBGRID的columns字段,设置DBGRID对应的column的showsummary:=true; 3、写入uniDBGRID.onColumnSummary事件: procedure TframeCa......

dillonxiao
9分钟前
1
0
MySQL语法速查1:基础命令篇

[TOC] 1.1. 关于 SQL SQL 是 Structure Query Language(结构化查询语言)的缩写,是关系型数据库的基本语言,由 IBM 在 20 世纪 70 年代开发出来,作为 IBM 关系数据库原型 System R 的原型...

whoru
15分钟前
1
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部