Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/multithreading/4.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 当我停止线程(Mythread.stop();)并开始做一些事情,然后我想再次使用线程时,该如何处理_Java_Multithreading - Fatal编程技术网

Java 当我停止线程(Mythread.stop();)并开始做一些事情,然后我想再次使用线程时,该如何处理

Java 当我停止线程(Mythread.stop();)并开始做一些事情,然后我想再次使用线程时,该如何处理,java,multithreading,Java,Multithreading,当我启动程序时,我想执行1。>2. >2.1 >3. >4. 我是如何做到这一点的停止,已被弃用,永远不应使用。并且线程只能启动一次: 多次启动线程是不合法的 我建议您阅读线程javadoc以及 您似乎希望在已启动的线程中等待,直到在主线程中完成某些操作。您的描述太模糊,无法给出明确的答案,但您应该查看java.util.concurrent包中的Lock和CountDownLatch 停止已被弃用,但您可以实现此暂停和恢复功能,如下所示: 以下示例代码将给出线程暂停和恢复的行为: use 't

当我启动程序时,我想执行1。>2. >2.1 >3. >4. 我是如何做到这一点的

停止,已被弃用,永远不应使用。并且线程只能启动一次:

多次启动线程是不合法的

我建议您阅读线程javadoc以及

您似乎希望在已启动的线程中等待,直到在主线程中完成某些操作。您的描述太模糊,无法给出明确的答案,但您应该查看java.util.concurrent包中的Lock和CountDownLatch


停止已被弃用,但您可以实现此暂停和恢复功能,如下所示:

以下示例代码将给出线程暂停和恢复的行为:

use 'thread.sleep' or wait and notify
有关更多详细信息,请在此链接中提供更多示例代码:


永远不要使用Threadstop,有关详细信息,请参阅。线程也是不可重入的,也就是说,它们不能重新启动。你不需要在末尾调用stop,它无论如何都会在末尾停止。+1我认为如果你知道你在做什么,你可以在当前线程中停止,但这是非常不可能的。
use 'thread.sleep' or wait and notify
public abstract class PausableTask implements  Runnable{

 private ExecutorService executor = Executors.newSingleThreadExecutor();
 private Future<?> publisher;
 protected volatile String state;
 private void someJob() {
  System.out.println("Job Done :- " + state);

 }

 abstract void task();

 @Override
 public void run() {
  while(!Thread.currentThread().interrupted()){
   task();  
  }
 }

 public void start(){
  publisher = executor.submit(this);
  state = "started";
 }

 public void pause() {
  publisher.cancel(true);
  state = "paused";
 }

 public void resume() {
  // you won't see this state
  state = "resumed";
  start();
 }

 public void stop() {
  state = "stoped";
  executor.shutdownNow();
 }
}