zoukankan      html  css  js  c++  java
  • JAVA中sleep()和wait()的区别

    sleep为线程的方法,而wait为Object的方法,他们的功能相似,最大本质的区别是:sleep不释放锁,wait释放锁。

    用法上的不同:sleep(milliseconds)可以用时间指定来使他自动醒过来,如果时间不到你只能调用interreput()来终止线程;wait()可以用notify()/notifyAll()直接唤起。

    测试wait和sleep释放锁的代码如下:

    public class SynchronizedTest extends Thread {
        int number = 10;
        public synchronized void first(){
            System.out.println("this is first!");
            number = number+1;
        }
        public synchronized void secord() throws InterruptedException {
            System.out.println("this is secord!!");
            Thread.sleep(1000);
    //        this.wait(1000);
            number = number*100;
        }
        @Override
        public void run() {
            first();
        }
    }
    
    SynchronizedTest synchronizedTest = new SynchronizedTest();
    synchronizedTest.start();
    synchronizedTest.secord();
    // 主线程稍等10毫秒
    Thread.sleep(10);
    System.out.println(synchronizedTest.number);
    

    根据结果可以得知:
    执行sleep(1000)运行的结果是:1001
    执行wait(1000)运行的结果是:1100

    总结: 使用 sleep(1000)不释放同步锁,执行的是10*100+1=1001,wait(1000)释放了锁,执行的顺序是(10+1)x100=1100,所以sleep不释放锁,wait释放锁。

  • 相关阅读:
    Faster-RCNN Pytorch实现的minibatch包装
    RuntimeError: cuda runtime error (10) : invalid device ordinal
    pip使用技巧
    Pytorch model saving and loading 模型保存和读取
    vs 附加包含目录不起作用
    微服务杂谈
    spring 学习笔记
    java 发送 http 请求
    PHP7 错误及异常机制
    Mac OS 下定制终端颜色
  • 原文地址:https://www.cnblogs.com/stilldream/p/15251710.html
Copyright © 2011-2022 走看看