gpt4 book ai didi

java - 等待执行器服务线程

转载 作者:行者123 更新时间:2023-12-01 12:30:13 25 4
gpt4 key购买 nike

我有一个类,它使用执行程序服务来同时运行任务。

代码:

class SomeClass{
private static ExecutorService taskThread = Executors.newFixedThreadPool(1, new ThreadFactory() {
private int threadCount = 0;

@Override
public Thread newThread(Runnable r) {
Thread t = new Thread(r);
t.setDaemon(true);
return t;
}
});

static {
Runtime.getRuntime().addShutdownHook(new Thread() {
@Override
public void run() {
// TODO Auto-generated method stub
taskThread.shutdown();
}
});
}


doSomeTask()
{
DocumentUploader callable = new DocumentUploader(randomID,fileLoc);
FutureTask<String> task1 = new FutureTask<String>(callable);
taskThread.execute(task1);
}


someFunctionforWait(){


//what here..???
}

我有另一个类名SomeOtherClass,它将访问由task1线程完成的修改/计算。所以我需要等待线程完成,那么如何才能等待task1完成。我打算做的是从类 SomeOtherClass 调用 someFunctionforWait() 来检查线程是否已完成,然后开始执行其任务。

我该怎么做。

最佳答案

你可以使用Futures,或者如果你想坚持使用ExecutorService,只需等待taskThread.shutdown()和taskThread.awaitTermination();您可以将这些语句放入 someFunctionforWait() 中,然后继续执行。这是一个基于您的代码的简化示例:

public class SomeClass {
private ExecutorService taskThread = Executors.newFixedThreadPool(1);
private List<Future<String>> futures = new ArrayList<Future<String>>();
void doSomeTask() {
FutureTask<String> task1 = new FutureTask<String>(new Callable<String>() {
public String call() throws Exception {
System.out.println("thread executing");
Thread.sleep(1000);
return Thread.currentThread().toString();
}
});
taskThread.execute(task1);
futures.add(task1);
};

public void someFunctionforWait() throws InterruptedException, ExecutionException{
taskThread.shutdown();
taskThread.awaitTermination(5, TimeUnit.SECONDS);
System.out.println("joined");
}

public void someFunctionforWaitAlternative() throws InterruptedException, ExecutionException{
for(Future<String> future : futures) {
System.out.println("future val: " + future.get());
}
System.out.println("joined");
}

public static void main(String[] args) throws Exception {
SomeClass c = new SomeClass();
c.doSomeTask();
c.someFunctionforWait();
//c.someFunctionforWaitAlternative();
}
}

关于java - 等待执行器服务线程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25980296/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com