• 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释放锁。

  • 相关阅读:
    小白扫盲之-计算机为何需要内存
    Centos 安装Pycharm 并移动到桌面。
    Docker守护进程
    插入排序
    快速排序
    归并排序
    __metaclass__方法
    Python面向对象(2)类空间问题以及类之间的关系
    Python面向对象(1)_初步认识
    python语法基础(8)_包
  • 原文地址:https://www.cnblogs.com/stilldream/p/15251710.html
Copyright © 2020-2023  润新知