Java 在本例中,哪个是当前线程?
我不确定Thread.sleep(1000)指的是哪一个线程,因为这两个线程都和主线程一样运行 我试着在网上搜索答案,但似乎在任何地方都找不到Java 在本例中,哪个是当前线程?,java,multithreading,Java,Multithreading,我不确定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();
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");
}
}
}
在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秒钟。A
线程
无法使任何其他线程
休眠Thread.sleep()
将始终使当前Thread
sleep。即使您调用了ob1.t.sleep()
,您仍然会通过当前线程的实例调用静态睡眠(长毫秒)
方法
我重复一遍,您不能让任何其他线程从线程
睡眠
是的,你说得对:
两个线程都在运行,主线程也在运行
但是main
方法在哪个线程中?是ob1.t
还是ob2.t
?不,它是主线程
,这意味着它将是正在睡眠的主线程。main()由主线程执行,在调用sleep()时,主线程是当前线程。trySystem.out.println(thread.currentThread().getName())代码>