Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/318.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 在本例中,哪个是当前线程?_Java_Multithreading - Fatal编程技术网

Java 在本例中,哪个是当前线程?

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();

我不确定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");  
      }
   }
}

在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()时,主线程是当前线程。try
System.out.println(thread.currentThread().getName())