JAVA,Thread.sleep()问题
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了JAVA,Thread.sleep()问题相关的知识,希望对你有一定的参考价值。
package day20_pm;
/**
*
* 砸墙 睡觉 砸墙 睡觉 砸墙 砸墙 睡觉 砸墙 砸穿了 干嘛呢!破相了
*
*/
public class SleepDemo
public static void main(String[] args)
Thread t = new Thread()
public void run()
for (int i = 0; i < 5; i++)
System.out.println("睡觉");
try
Thread.sleep(10000);
catch (InterruptedException e)
// e.printStackTrace();
System.out.println("干嘛呢!破相了");
break;
;
t.start();
for (int i = 0; i < 5; i++)
System.out.println("砸墙");
try
Thread.sleep(5000);
catch (InterruptedException e)
e.printStackTrace();
System.out.println("砸穿了");
t.interrupt();// 打断线程t的sleep
为什么先执行砸墙………………
如果你不sleep 你会发现main thread都是先运行
所以你不用期待他们之前会有个什么顺序 这和你sleep与否 sleep时间 相关 但也不保证精确到你写的时间点就一定会1:2的输出
记住3点 一个线程start只意味这3件事
1 线程在新的调用堆栈中执行
2 线程从new(new之后没start前状态都是NEW可以用getState()看)状态变为RUNNABLE
3 当线程有机会(不是写在前面就先运行,机会是JVM说的算的你无法确定何时)运行时,它的目标run()将运行 参考技术A 多线程的启动也需要时间
再多线程启动的过程中
主线程继续往下面执行所以先执行砸墙 参考技术B 线程是不按照顺序执行的,你多运行几次,就会发现惊喜 参考技术C 主方法一个线程,t一个线程,t睡了10000,主方法睡了5000先醒,所以先砸墙
java Thread.sleep卡死问题
这是一个偶发问题。
在java中执行等待60秒:Thread.sleep(60*1000),
结果程序一直卡在这行代码,
在120秒后都没有执行结束。
这是什么原因?怎么解决啊?
也就是说,这个代码无法精确控制该进程在此处恰好停留1分钟。具体的等待时间=1分钟+在排队进程中的等候时间。
你也说了这个是一个偶发问题,也就是说在特殊情况下,该进程在队列中排列的时间过长导致了等待时间很长。不过考虑到cpu的时间片大小,你等待了120秒还卡在那里的情况比较少见,可能是电脑优化不好,cpu比较老旧,开的进程特别多,导致电脑比较卡。 参考技术A sleep会把当前线程暂停运行,所以后边的代码必须等sleep结束
这也是为什么java中会有多线程,就是把sleep的东西放到一个子线程里,这样主线程就不会卡住不动了 参考技术B 你确定是卡在sleep那么?
以上是关于JAVA,Thread.sleep()问题的主要内容,如果未能解决你的问题,请参考以下文章
NetBeans / Java / 新提示:在循环中调用 Thread.sleep