我不确定 Thread.sleep(1000( 指的是哪一个,因为两个线程和主线程都在运行。
我尝试过在线搜索答案,但似乎在任何地方都找不到任何东西。
public class Practice {
public static void main(String args[]) {
NewThread ob1 = new NewThread("One");
NewThread ob2 = new NewThread("Two");
ob1.t.start();
ob2.t.start();
try {
Thread.sleep(1000);
} catch(InterruptedException a) {
System.out.println("Exception a caught");
}
}
}
thread
不能让任何其他thread
睡觉。 Thread.sleep()
将始终使当前thread
睡眠。即使您调用了ob1.t.sleep()
,您仍将通过当前thread
的Thread
实例调用 static sleep(long millis)
方法。
我再说一遍,你不能让任何其他thread
从thread
睡觉.
是的,当你说的时候你是对的:
两个线程和主线程都在运行。
但是main
方法在什么线程中?是ob1.t
还是ob2.t
?不,它是主要的thread
,这意味着它将是正在睡觉的主要thread
。
在 Java 程序中,运行 main(String[] args)
函数的线程是主线程。当您调用函数Thread.sleep(long)
时,将休眠的线程是调用该函数的线程。看看下面的这个例子。
public class ThreadSleepTest {
public static void main(String[] args) {
new Thread(() -> {
System.out.println("oneSecondSleeper will sleep for 1 seconds");
try {
Thread.sleep(1000L);
} catch (InterruptedException ex) {
Thread.currentThread().interrupt();
ex.printStackTrace();
}
System.out.println("oneSecondSleeper is awake now!");
}).start();
new Thread(() -> {
System.out.println("twoSecondSleeper will sleep for 2 seconds");
try {
Thread.sleep(2000L);
} catch (InterruptedException ex) {
Thread.currentThread().interrupt();
ex.printStackTrace();
}
System.out.println("twoSecondSleeper is awake now!");
}).start();
System.out.println("mainThread will sleep for 3 seconds");
try {
Thread.sleep(3000L);
} catch (InterruptedException ex) {
Thread.currentThread().interrupt();
ex.printStackTrace();
}
System.out.println("mainThread is awake now!");
}
}
主线程将创建两个子线程,分别休眠一秒和两秒。创建子线程后,主线程将休眠 3 秒。