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