sleep和wait到底什么区别

wait是在当前线程持有wait对象锁的情况下,暂时放弃锁,并让出CPU资源,并积极等待其它线程调用同一对象的notify或者notifyAll方法。注意,即使只有一个线程在等待,并且有其它线程调用了notify或者notifyAll方法,等待的线程只是被激活,但是它必须得再次获得锁才能继续往下执行。换言之,即使notify被调用,但只要锁没有被释放,原等待线程因为未获得锁仍然无法继续执行。

wait方法需要释放锁,前提条件是它已经持有锁。所以wait和notify(或者notifyAll)方法都必须被包裹在synchronized语句块中,并且synchronized后锁的对象应该与调用wait方法的对象一样。否则抛出IllegalMonitorStateException

sleep方法告诉操作系统至少指定时间内不需为线程调度器为该线程分配执行时间片,并不释放锁(如果当前已经持有锁)。实际上,调用sleep方法时并不要求持有任何锁。

时间: 2024-10-26 11:27:43

sleep和wait到底什么区别的相关文章

高铁、动车到底啥区别?看完彻底懂了(组图)

摘自:网易新闻 (原标题:高铁.动车到底啥区别?看完彻底懂了(组图)) 高铁与动车的区别到底在哪里?磁悬浮列车又是什么鬼?今天给你讲讲清楚! 高铁.动车到底啥区别?看完彻底懂了 一.普通列车与高铁钢轨的区别 1.普通铁路的钢轨 几十米就有个接口,火车行驶总是离不开“哐当哐当”的声音.车轮滚过钢轨连接处时,车轮震动.车厢震动.地面也震动,列车行驶一点儿都不平稳,简直就像在大风大浪的海面上行船一样,不能平稳前进,速度就不能提高,否则震动加剧就会形成翻车的事故. 2.高铁的钢轨 我们看看高铁,修路时按

C++包含头文件中<>和""的区别

#include "book.h" #include<iostream.h> 在刚开始学习都会有这种迷惑,有的程序用<>,有的却用"",那么二者到底什么区别呢,什么情况下使用呢? <>和""表示编译器在搜索头文件时的顺序不同,<>表示从系统目录下开始搜索,然后再搜索PATH环境变量所列出的目录,不搜索当前目录,""是表示从当前目录开始搜索,然后是系统目录和PATH环境变量所列出的

T检验与F检验的区别_f检验和t检验的关系

1,T检验和F检验的由来 一般而言,为了确定从样本(sample)统计结果推论至总体时所犯错的概率,我们会利用统计学家所开发的一些统计方法,进行统计检定. 通过把所得到的统计检定值,与统计学家建立了一些随机变量的概率分布(probability distribution)进行比较,我们可以知道在多少%的机会下会得到目前的结果.倘若经比较后发现,出现这结果的机率很少,亦即是说,是在机会很少.很罕有的情况下才出现:那我们便可以有信心的说,这不是巧合,是具有统计学上的意义的(用统计学的话讲,就是能够拒

通俗理解T检验与F检验的区别【转】

转自:http://blog.sina.com.cn/s/blog_4ee13c2c01016div.html1,T检验和F检验的由来一般而言,为了确定从样本(sample)统计结果推论至总体时所犯错的概率,我们会利用统计学家所开发的一些统计方法,进行统计检定. 通过把所得到的统计检定值,与统计学家建立了一些随机变量的概率分布(probability distribution)进行比较,我们可以知道在多少%的机会下会得到目前的结果.倘若经比较后发现,出现这结果的机率很少,亦即是说,是在机会很少.

通俗理解T检验与F检验的区别

声明:此文内容来源于网络,本文只作用个性化标注和解释说明. 1.T检验和F检验的由来    一般而言,为了确定从样本(sample)统计结果推论至总体时所犯错的概率,我们会利用统计学家所开发的一些统计方法,进行统计检定.    通过把所得到的统计检定值[1],与统计学家建立了一些随机变量的概率分布(probability distribution)进行比较,我们可以知道在多少%的机会下会得到目前的结果.倘若经比较后发现,出现这结果的机率很少,亦即是说,是在机会很少.很罕有的情况下才出现:那我们便

【转】long和int的区别

原文地址: http://blog.sina.com.cn/s/blog_6f62c9510101svjz.html#cmt_3221642 原文: 突然间就想到了long和int到底什么区别(发现有很多问题都是突然间想到的),然后百度.google各种查找,各种书籍:<C++ Primer>.<C程序设计语言>查看,终于明白了一些.下面的话选自<C程序设计语言>: short与long两个限定符的引入可以为我们提供满足实际需要的不同长度的整形数.int通常代表特定机器

ruby中proc和lambda的return区别

学习ruby有一段时间了,但是我看了好几遍proc和lambda的return区别的区别讲解,始终没明白到底什么区别,今天上午又看,终于感觉是茅塞顿开有点领悟了 一下内容部分来自<<ruby元编程>>第二版92页 1 lambda中的return表示仅仅才从,这个lambda中返回,那么从lambda中返回到底是啥意思呢. l = lambda {return 10} 我的理解是,你正常考虑代码快执行 l被赋值成10,而且return的影响范围仅仅在大括号里面.并没有影响其他的代码

Linux IO模型与Java NIO

概述看Java NIO一篇文章的时候又看到了"异步非阻塞"这个概念,一直处于似懂非懂的状态,想解释下到底什么是异步 什么是非阻塞,感觉抓不住重点.决定仔细研究一下.本文试图研究以下问题: web server原理,bio的connector与nio的connector在架构上到底什么区别? NIO的优势到底在哪里,是如何应用到实践中的? 同步/异步.阻塞/非阻塞到底是什么概念,引出的IO模型同步阻塞.同步非阻塞.异步阻塞.异步非阻塞的具体使用场景,适用的场景是怎样的? bio nio也

探究javascript对象和数组的异同,及函数变量缓存技巧

javascript中最经典也最受非议的一句话就是:javascript中一切皆是对象.这篇重点要提到的,就是任何jser都不陌生的Object和Array. 有段时间曾经很诧异,到底两种数据类型用来存储数据有什么不同.于是,我打算探究探究. 一.掌握三种数据类型 首先,一个前提必须掌握的,就是必须理解javascript的数据类型分类,主要分为以下三种: 第一种类型是标量(scalar),也就是一个单独的字符串(string)或数字(numbers),比如"北京"这个单独的词. 第二