Java 线程在被中断之前是否需要处于可运行状态?
java中的线程在被中断方法中断之前是否必须处于就绪状态? 我试图通过在下面输入上面给定的代码来检查这一点Java 线程在被中断之前是否需要处于可运行状态?,java,multithreading,interrupt,interruption,Java,Multithreading,Interrupt,Interruption,java中的线程在被中断方法中断之前是否必须处于就绪状态? 我试图通过在下面输入上面给定的代码来检查这一点 class MyThread extends Thread { public void run() { try { for(int i =0;i<10;i++) { System.out.println("I am lazy thread"); Thread.s
class MyThread extends Thread
{
public void run() {
try
{
for(int i =0;i<10;i++) {
System.out.println("I am lazy thread");
Thread.sleep(2000);
}
}
catch(InterruptedException e) {
System.out.println("I got interrupted");
}
}
}
public class SleepAndInterruptDemonstrationByDurga {
public static void main(String[] args) {
MyThread t= new MyThread();
t.start();
t.interrupt();
System.out.println("End of main thread");
}
}
为什么输出不能是
I am lazy thread
I got interrupted
End of main thread
根据代码可以看出,中断方法首先由主线程调用。最后,我想问,在线程启动之前执行中断调用时,是否有可能出现任何情况?这里发生的是
1) 您启动的线程需要时间来准备运行,因此“主线程结束”可能会首先打印,尽管这不能保证
2) 中断标志在新线程启动之前设置,但在线程休眠之前,不会检查该标志的状态。当您在只设置标志的线程上调用interrupt时,除非您对sleep或isInterrupted之类的东西进行调用,否则线程不会做任何响应。所以“我是懒线程”会在“我被打断”之前出现
中断是自愿的,需要被中断线程的合作。线程在运行之前无法对中断标志状态进行操作,因为某些代码必须检查该标志并对其进行操作 行
System.out.println(“主线程结束”)代码>在线程启动之前执行。在我的计算机上,程序可以打印主线程的第一个、第二个或最后一个
至于您的问题,Java线程没有所谓的“就绪”或“中断”状态(请参阅)Thread.interrupt()
只会导致线程将其状态更改为“终止”
另见:
中断一个非活动线程不需要有任何效果
如果希望主线程等待另一个线程完成它必须执行的操作,则应执行t.join()
java中的线程在运行之前是否必须处于就绪状态
被中断方法中断
interrupt
方法不会真正中断线程。它只设置调用它的线程的中断状态。也就是说,如果您反转对中断
方法和启动
方法的调用,您将注意到线程
不会被中断
MyThread t = new MyThread();
t.interrupt();
t.start();
这应该确认,对于线程.interrupt
方法要对线程
产生影响,最低要求是在中断
方法之前对线程
调用启动
注意没有称为就绪状态的线程状态。您所指的是状态,它表明线程调用了启动
,我感谢您的回答,但我想问的是,在调用睡眠之前,进行中断调用的线程是否需要处于就绪状态。然后在进入中断状态之前,线程必须处于睡眠状态。因此,要使线程中断,线程必须首先处于就绪状态。是吗?@Deep:这样更好吗?此外,有时在代码中的t.start()之后会首先调用子线程,以使线程在必须运行的中断状态下运行。我不知道如何说得更清楚。是的…这就是我想听到的,线程被中断…在中断被调用之前,它必须处于就绪状态…我知道了…谢谢
MyThread t = new MyThread();
t.interrupt();
t.start();