文档章节

wait()和notify()

marjey
 marjey
发布于 2016/11/24 11:50
字数 350
阅读 9
收藏 0
点赞 0
评论 0

假设一个对象:object,当有一个线程调用这个对象的wait();方法的时候。这个进程就进入这个对象的等待队列。然后这个线程就暂停运行。若多个线程同时调用这个对象的wait().多个线程对进入这个对象的等待队列。(即:在哪个线程中调用object.wait(),哪个线程就停止,同时这个线程再启动的权力交给这个object).

notify():通知object,让它随机把他管辖范围内的一个线程启动。

notifyAll()。通知object管辖下的所有线程,撒丫子狂奔吧。

(注意以上方法执行体必须被同步代码块包含synchronized,因为它是多线程共享操作。可能存在线程之间的竞争。)

object在一个时刻必须只能被一个线程所保有!!!!

即便是另一个线程通过objcect通知等待的线程执行,也要等通知的那个线程释放object之后。

/**
 * Created by li on 2016/11/24.
 */
public class DemoThread extends Thread {
    private final static Object object = new Object();

    public static void main(String[] args) {
        DemoThread demoThread = new DemoThread();
        demoThread.start();
        try {
            Thread.sleep(2000);
        } catch (InterruptedException e) {
            e.printStackTrace();
        }

        System.out.println(1);
        synchronized (object) {
            object.notify();
        }
        System.out.println(demoThread.isAlive());
//        try {
//            synchronized (demoThread) {
//                demoThread.wait();
//            }
//        } catch (InterruptedException e) {
//            e.printStackTrace();
//        }
//        while (true) {
//            System.out.println(1);
//            try {
//                Thread.sleep(1000);
//            } catch (InterruptedException e) {
//                e.printStackTrace();
//            }
//        }

//        demoThread.interrupt();
    }

    @Override
    public void run() {
        while (!interrupted()) {
            System.out.println("bulabulabula");
            try {
                Thread.sleep(1000);
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
            try {
                synchronized (object) {
                    object.wait();
                    System.out.println("线程重新启动");
                }
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
        }
    }
}

 

© 著作权归作者所有

共有 人打赏支持
marjey
粉丝 2
博文 146
码字总数 139219
作品 0
昆明

暂无相关文章

OSChina 周六乱弹 —— 假如你被熊困到树上

Osc乱弹歌单(2018)请戳(这里) 【今日歌曲】 @小小编辑:推荐歌曲《如果写不出好的和弦就该在洒满阳光的钢琴前一起吃布丁》 《如果写不出好的和弦就该在洒满阳光的钢琴前一起吃布丁》- 谢...

小小编辑 ⋅ 37分钟前 ⋅ 4

vbs 取文件大小 字节

dim namedim fs, s'name = Inputbox("姓名")'msgbox(name)set fs = wscript.createobject("scripting.filesystemobject") 'fs为FSO实例if (fs.folderexists("c:\temp"))......

vga ⋅ 今天 ⋅ 1

高并发之Nginx的限流

首先Nginx的版本号有要求,最低为1.11.5 如果低于这个版本,在Nginx的配置中 upstream web_app { server 到达Ip1:端口 max_conns=10; server 到达Ip2:端口 max_conns=10; } server { listen ...

算法之名 ⋅ 今天 ⋅ 0

Spring | IOC AOP 注解 简单使用

写在前面的话 很久没更新笔记了,有人会抱怨:小冯啊,你是不是在偷懒啊,没有学习了。老哥,真的冤枉:我觉得我自己很菜,还在努力学习呢,正在学习Vue.js做管理系统呢。即便这样,我还是不...

Wenyi_Feng ⋅ 今天 ⋅ 0

博客迁移到 https://www.jianshu.com/u/aa501451a235

博客迁移到 https://www.jianshu.com/u/aa501451a235 本博客不再更新

为为02 ⋅ 今天 ⋅ 0

win10怎么彻底关闭自动更新

win10自带的更新每天都很多,每一次下载都要占用大量网络,而且安装要等得时间也蛮久的。 工具/原料 Win10 方法/步骤 单击左下角开始菜单点击设置图标进入设置界面 在设置窗口中输入“服务”...

阿K1225 ⋅ 今天 ⋅ 0

Elasticsearch 6.3.0 SQL功能使用案例分享

The best elasticsearch highlevel java rest api-----bboss Elasticsearch 6.3.0 官方新推出的SQL检索插件非常不错,本文一个实际案例来介绍其使用方法。 1.代码中的sql检索 @Testpu...

bboss ⋅ 今天 ⋅ 0

informix数据库在linux中的安装以及用java/c/c++访问

一、安装前准备 安装JDK(略) 到IBM官网上下载informix软件:iif.12.10.FC9DE.linux-x86_64.tar放在某个大家都可以访问的目录比如:/mypkg,并解压到该目录下。 我也放到了百度云和天翼云上...

wangxuwei ⋅ 今天 ⋅ 0

PHP语言系统ZBLOG或许无法重现月光博客的闪耀历史[图]

最近在写博客,希望通过自己努力打造一个优秀的教育类主题博客,名动江湖,但是问题来了,现在写博客还有前途吗?面对强大的自媒体站点围剿,还有信心和可能型吗? 至于程序部分,我选择了P...

原创小博客 ⋅ 今天 ⋅ 0

IntelliJ IDEA 2018.1新特性

工欲善其事必先利其器,如果有一款IDE可以让你更高效地专注于开发以及源码阅读,为什么不试一试? 本文转载自:netty技术内幕 3月27日,jetbrains正式发布期待已久的IntelliJ IDEA 2018.1,再...

Romane ⋅ 今天 ⋅ 0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部