课程
/后端开发
/Java
/细说多线程之Thread VS Runnable
错了吧?调用sleep()方法,是一直占有着cpu,不会放弃cpu的。用wait()方法才可以进入阻塞,让出cpu,等待notify()唤醒。
2015-04-11
源自:细说多线程之Thread VS Runnable 3-1
正在回答
执行线程sleep方法是依然占着cpu的,操作系统认为该当前线程正在运行,不会让出系统资源。
执行wait方法是让线程到等待池等待,让出一系列的系统资源,其他线程可以根据调度占用cpu
net_liufei 提问者
慕勒048149
handsomecoder
线程的资源有不少,但应该包含CPU资源和锁资源这两类。
sleep(long mills):让出CPU资源,但是不会释放锁资源。
wait():让出CPU资源和锁资源。
锁是用来线程同步的,sleep(long mills)虽然让出了CPU,但是不会让出锁,其他线程可以利用CPU时间片了,但如果其他线程要获取sleep(long mills)拥有的锁才能执行,则会因为无法获取锁而不能执行,继续等待。
但是那些没有和sleep(long mills)竞争锁的线程,一旦得到CPU时间片即可运行了。
我的java书上说:sleep(long mills)是会让出CPU的
估计你把资源和锁搞错了
举报
认识Thread和Runnable的区别,以及使用jstack生成线程快照
2 回答线程共享资源,cpu资源占用后资源状态变化
1 回答一个CPU里怎么会有两个线程同时存在
2 回答为什么在线程1的执行过程中还会被抢占资源?至少也得等run方法执行完才被抢占吧?
4 回答如果在MyThread类(继承Thread)中将变量声明为static,线程实例是不是也能共享资源了?
2 回答对该视频中部分内容的疑问:买票的不同应该不是Thread和Runnable不同导致的,而是编程是Thread的程序没有共享资源。