sleep与 wait区别主要是对cpu的占用

  sleep是线程被调用时,占着cpu去睡觉,其他线程不能占用cpu,os认为该线程正在工作,不会让出系统资源,wait是进入等待池等待,让出系统资源,其他线程可以占用cpu,一般wait不会加时间限制,因为如果wait的线程运行资源不够,再出来也没用,要等待其他线程调用notifyall方法唤醒等待池中的所有线程,才会在进入就绪序列等待os分配系统资源,
sleep是静态方法,是谁掉的谁去睡觉,就算是在main线程里调用了线程b的sleep方法,实际上还是main去睡觉,想让线程b去睡觉要在b的代码中掉sleep

sleep(100L)是占用cpu,线程休眠100毫秒,其他进程不能再占用cpu资源,wait(100L)是进入等待池中等待,交出cpu等系统资源供其他进程使用,在这100毫秒中,该线程可以被其他线程notify,但不同的是其他在等待池中的线程不被notify不会出来,但这个线程在等待100毫秒后会自动进入就绪队列等待系统分配资源,换句话说,sleep(100)在100毫秒后肯定会运行,但wait在100毫秒后还有等待os调用分配资源,所以wait100的停止运行时间是不确定的,但至少是100毫秒。
时间: 2024-12-28 23:38:32

sleep与 wait区别主要是对cpu的占用的相关文章

解决Surface CPU/Memory占用太高问题

已经N久N久没有码文了,趁着今天不加班,仔细回想了走过的这一年,貌似有的只是加班.重复的加班.重复重复的加班,难得有闲暇的时间去整理一下日常相关的排错及工作中相关的经验技巧等,甚是惋惜:在我所认为的技术过往中,我更希望每个阶段都留下些什么,或许这是一种习惯.亦或是另外一种生活方式---- 因为工作原因,开始接触苏菲,但是刚开始使用的时候被她霸道的CPU及内存占用彻底惊呆了,今天简单讨论一下Surface pro4 CPU占用高的问题: 配置及日常CPU占用如下: 网上常见的处理方法是: 1.每次

答:SQLServer DBA 三十问之一: char、varchar、nvarchar之间的区别(包括用途和空间占用);xml类型查找某个节点的数据有哪些方法,哪个效率高;使用存储 过程和使用T-SQL查询数据有啥不一样;

http://www.cnblogs.com/fygh/archive/2011/10/18/2216166.html 1. char.varchar.nvarchar之间的区别(包括用途和空间占用):xml类型查找某个节点的数据有哪些方法,哪个效率高:使用存储 过程和使用T-SQL查询数据有啥不一样: ------------------------------------------------ SQL中char.varchar.nchar.nvarchar的区别 http://www.cn

Linux 跟踪进程对CPU的占用情况,对内存的占用情况

本文使用java进程来举例 1. 查看java进程及其线程对cpu的占用情况 首先使用ps -ef找到java进程id # ps -ef|grep java 然后通过top -p pid命令查看该进程占用的cpu情况,例如: [[email protected] ~]# top -p 23386 top - 11:10:52 up 124 days, 19:18,  2 users,  load average: 0.00, 0.00, 0.00 Tasks:   1 total,   0 ru

【原创】面向对象版本地CPU资源占用监控脚本

前期准备: 1.python2.7环境 2.相关第三方库下载安装 脚本工作过程: 1.根据输入的进程名判断进程是否存在,如果不存在则进行等待,直到检测到进程PID,中途进程退出抛出异常,键入enter后等待进程重启 实际作用: 1.可以重复监控某一进程CPU资源占用情况,结果同步到本地D盘文本保存 #coding=utf-8 import psutil import sys import time import win32com.client class Cpu(): def __init__(

(转)MySQL 主键与索引的联系与区别 主键与索引是什么?

关系数据库依赖于主键,它是数据库物理模式的基石.主键在物理层面上只有两个用途: 惟一地标识一行. 作为一个可以被外键有效引用的对象. 索引是一种特殊的文件(InnoDB数据表上的索引是表空间的一个组成部分),它们包含着对数据表里所有记录的引用指针.下面是主键和索引的一些区别与联系. 1. 主键一定是唯一性索引,唯一性索引并不一定就是主键. 所谓主键就 是能够唯一标识表中某一行的属性或属性组,一个表只能有一个主键,但可以有多个候选索引.因为主键可以唯一标识某一行记录,所以可以确保执行数据更新.删

SQL Server 解决CPU 高占用的一般step

第一步: 看这些CPU是不是SQL Server用的. 第二步: 确定SQL Server 有没有引发17883\17884错误 第三步: 找出使用CPU最高的语句进行优化.(sys.dm_exec_query_stats    sys.exec_sql_text  ) sys.dm_exec_query_stats.total_work_time 代表着占用CPU 的时间. sys.dm_exec_query_stats.plan_generate_num代表着重编译的次数.---编译也是要C

oracle 数据库服务器CPU资源占用超高(75%)

环境: Oracle Database 11g Enterprise Edition Release 11.2.0.2.0 - 64bit Production CentOS release 6.5 X64 现象:系统CPU使用率达到75%,查看系统进程资源状态. 数据库中查看 select t.sql_text,s.sid, s.serial#,s.program,s.process,s.USERNAME,p.spid from  v$sqlarea t ,v$session s ,v$pro

监控linux的系统资源和自定义进程的cpu 内存占用。

1 #coding=utf8 2 import time 3 import psutil 4 from pprint import pprint 5 6 from logger_until import LoggerUntil 7 logger = LoggerUntil(name="Monitor").getlog(logfilename='Monitor.log', loglevel=2, add_StreamHandler=1) 8 9 need_monitor_procces_

jstack定位cpu高占用

top命令找出最高占用的进程(command为java) 输入:top -H -p PID 或 ps -mp PID -o THREAD,tid,time 找出最高占用的线程并记录thread_id 使用命令将pid转换为十六进制 printf "%X\n" thread_id 查看dump信息(-a 30 意思打印30行) jstack pid |grep 16进制的thread_id -a 30 或者导出 jstack pid |grep 16进制的thread_id -a 30