java中的thread.sleep(1000) 用法

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了java中的thread.sleep(1000) 用法相关的知识,希望对你有一定的参考价值。

请java高手帮忙看一下这个程序

class A

System.out.println("start");
Thread.sleep(1000);
System.out.println("end");


这个程序有啥错误

1.所有这些语句都必须在方法里面写,类里面只能存在属性和方法。不存在语句

2.Thread.sleep()需要捕捉异常,加try/catch
参考技术A public class TestStaticAera
static
System.out.println("start");
try
Thread.sleep(1000);
catch (InterruptedException e)
e.printStackTrace();

System.out.println("end");


类里面可以存在静态块,在块里面可以写语句,类似上面。但是缺少了main方法,在执行的时候就会提示
java.lang.NoSuchMethodError: main
Exception in thread "main" 。

添加main方法,就不会报错了。
参考技术B 这个程序会产生异常InterruptException
应写为
try

Thread.sleep(1000);

catch(Exception e)
参考技术C 1.所有这些语句都必须在方法里面写
2.Thread.sleep()需要捕捉异常
try

Thread.sleep(1000);
catch(Exception e)
参考技术D A要继承Thread或实现Runable接口才能定义线程,输出语句不是输出字符串吗.根本没调用start方法.

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



为什么先执行砸墙………………

t是新启的线程 在时间极小的那一瞬间 main thread已经运行到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(1000) 用法的主要内容,如果未能解决你的问题,请参考以下文章

java Thread.sleep卡死问题

Java中的线程的休眠Thread.sleep()

java中Thread.sleep(1000)问题

for 循环中的 Java Thread.sleep()

Java问题,我同事说Thread.sleep(1000)可能会报异常,我觉得不可能啊?

Java两种延时——thread和timer