java:绝对需要中断线程

use*_*260 6 java multithreading interrupt

我是Java新手并使用某人给出的代码.在代码的最后,如果线程尚未完成,它们会中断一个线程.我正在测量代码的时间.

问题是Java代码首先发出所有线程,然后最后中断.中断是否必要?我们不能等到所有线程真正完成吗?或者可能只是跳过中断(这些线程正在使用process exec命令运行进程,无论如何它们都将完成).这是相关的代码.首先是单个线程的代码:

  String commandString = "./script.scr ";
  process = Runtime.getRuntime().exec(commandString);
  BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(process.getInputStream()));
  while ((lsString = bufferedReader.readLine()) != null)
        {
            System.out.println(lsString);
        }       
        try
        {
            process.waitFor();
        }
Run Code Online (Sandbox Code Playgroud)

现在调度这些线程的部分的代码:

public void stopWhenAllTaskFinished()
{
    while(notFinished) {sleep(50);} //notFinished is class variable and somewhere else it will set to false. 
    //now finished.
  //Interrupt all the threads
    for (int i=0; i<nThreads; i++) {
        threads[i].interrupt();
    }
}
Run Code Online (Sandbox Code Playgroud)

从主类调用此函数,如:

 obj.stopWhenAllTaskFinished()
Run Code Online (Sandbox Code Playgroud)

我非常感谢任何见解或回答.

Ste*_*n C 1

目前尚不清楚您发布的代码是否需要中断。

  • 如果notFinished设置为false所有线程完成时,则不需要中断。

  • 如果notFinished设置为false当某些线程可能尚未完成时,则可能有必要。是否确实有必要取决于其他因素:

    • 您准备好让应用程序等待线程自然完成了吗?
    • 你能确定线程完成吗?(它们可以永远挂起/阻塞吗?)
    • 您需要他们的活动结果吗?
    • 他们会响应中断吗?(在这种情况下,我认为答案是“是”。)
    • 把线留在那里有什么坏处吗?(例如,它是否会阻止应用程序关闭?)