本示例中的哪个是当前线程



我不确定 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(),您仍将通过当前threadThread实例调用 static sleep(long millis) 方法。

我再说一遍,你不能让任何其他threadthread睡觉.

是的,当你说的时候你是对的:

两个线程和主线程都在运行。

但是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 秒。

最新更新