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

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

hot3.png

1 sleep() 定义在Thread类中,是static native方法,static 说明是属于类的,不属于对象的。

  wait()/notify()定义在Object类中,即所有类中都会有这些方法。

2 sleep(): 线程休眠一定时间,放弃CPU时间片;休眠结束后,等待分配CPU资源,继续执行。(并不放弃锁)

  wait(): 放弃获得的锁(即前提是已经得到了锁),等待其他线程notify。再次得到锁后,继续执行。

/** * Causes the currently executing thread to sleep (temporarily cease * execution) for the specified number of milliseconds, subject to * the precision and accuracy of system timers and schedulers. The thread * does not lose ownership of any monitors.//1 仍然拥有锁 */public static native void sleep(long millis) throws InterruptedException;
public class Object {public final native void wait(long timeout) throws InterruptedException;public final native void notify();}
public class _01_TestSleep {    public static void main(String[] args) throws Exception {        Task task = new Task();        System.out.println(System.currentTimeMillis()/1000 + " begin----");        Task.sleep(1000); // static方法,当前线程暂停        task.sleep(1000); //  static方法,当前线程暂停        System.out.println(System.currentTimeMillis()/1000 + " over----");    }}class Task extends Thread {    @Override    public void run() {    }}
//网上找的例子:模拟忙等待过程class MyObject implements Runnable {    private Monitor monitor;    public MyObject(Monitor monitor) {        this.monitor = monitor;    }    public void run() {        try {            TimeUnit.SECONDS.sleep(3);            System.out.println("i'm going.");            monitor.gotMessage();        } catch (InterruptedException e) {            e.printStackTrace();        }    }}class Monitor implements Runnable {    private volatile boolean go = false;    public synchronized void gotMessage() throws InterruptedException {        go = true;        notify();    }    public synchronized void watching() throws InterruptedException {        while (go == false)            wait(); // 放弃锁资源,等待被唤醒, 和 while, synchronized, notify 等一起使用        System.out.println("He has gone.");    }    public void run() {        try {            watching();        } catch (InterruptedException e) {            e.printStackTrace();        }    }}public class _03_Wait {    public static void main(String[] args) {        Monitor monitor = new Monitor();        MyObject o = new MyObject(monitor);        new Thread(o).start();        new Thread(monitor).start();    }}

转载于:https://my.oschina.net/u/1537182/blog/660819

你可能感兴趣的文章
华南理工章熙春:移动应用推动数字校园
查看>>
Linux下c++程序内存泄漏检测代码范例
查看>>
FIDO联盟拥抱政府监管,全面打造安全可信网络
查看>>
Aruba携手中国电信云南公司共建 “智慧校园”
查看>>
zGlue选择 ASE 作为战略制造合作伙伴,加速物联网市场开发
查看>>
BlackNurse新型DoS攻击 15M流量就可以打瘫思科防火墙 思科做出了回应
查看>>
Linux下的APT攻击工具HDD Rootkit分析
查看>>
Interop 2015:思科为其SDN架构做好安全防护
查看>>
Windows 10中国普及速度慢 原因是盗版难
查看>>
第19届亚太反病毒研究者联盟(AVAR)国际大会开幕在即
查看>>
解决 WordPress 升级更新后“添加媒体”按钮失效问题
查看>>
防范勒索软件的七种方法
查看>>
浪潮发布K-DB数据库 打造完整主机生态链
查看>>
DBA五大致命失误:你的备份可靠吗?
查看>>
巴黎袭击前夜,匿名者黑客组织反ISIS账号被封
查看>>
关于互联网+的几点思考:从用户到变革
查看>>
挖掘数据金矿 领军协同创新 曙光荣膺“2016大数据创新应用领袖企业”称号
查看>>
半个美国互联网瘫痪 360网络安全研究院发布分析报告
查看>>
并不是所有的备份都可以防止“永恒之蓝”,除了和力记易!
查看>>
网狐6603(预览版) 全部架设过程
查看>>