博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
wait()和notify()
阅读量:5959 次
发布时间:2019-06-19

本文共 1940 字,大约阅读时间需要 6 分钟。

hot3.png

假设一个对象: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();            }        }    }}

 

转载于:https://my.oschina.net/marjeylee/blog/793471

你可能感兴趣的文章
Block
查看>>
for in,Object.keys,for of 的区别
查看>>
结构型设计模式之桥接模式
查看>>
深入理解nodejs Stream模块
查看>>
java版spring cloud+spring boot+redis多租户社交电子商务平台:服务消费(Feign)
查看>>
ios手机QQ无发改变title问题
查看>>
深入理解ES6 ---- 正则扩展
查看>>
activiti总结(一)流程图结构简介
查看>>
dom节点和vue中template浅谈
查看>>
第三方开源框架(一)
查看>>
JSONP跨域
查看>>
对js陀螺仪的认知理解
查看>>
react native scrollView定时器广告位
查看>>
如何在vue中使用ts开发
查看>>
学习vim其实很简单
查看>>
刘强东解读京东AI战略:无人仓无人配送都在布局
查看>>
redux源码分析
查看>>
吴恩达机器学习系列18:核函数
查看>>
Java内存区域和内存模型
查看>>
写python 报错 IndentationError:unindent does not match any outer indentation level
查看>>