3 回答
TA贡献1890条经验 获得超9个赞
有没有办法从 Callable 创建线程?
简短回答:不Thread
。API 需要一个Runnable
不是Callable
.
您可以使用 a 的Runnable
包装器解决此问题Callable
,尽管从 中获取结果Callable
有点麻烦!一个更好的主意是使用ExecutorService
. 这使您可以避免不创建太多线程和(或者)管理自己的线程池的问题。
注意到您的示例并不真正需要Callable
. 您正在返回构造函数Set
中提供的a AddNumImmediately
。调用者可以简单地保留对该Set
对象的引用。
TA贡献1856条经验 获得超11个赞
您不能从 callable 创建新线程。就在那里。对于一个新线程,线程必须出现。据说您可以将 FurtureTask 与 callable 和 Thread 一起使用来获取结果。你可以尝试这样的事情:
FutureTask<String> f1 = new FutureTask<String>(new Callable<String>() {
public String call() throws InterruptedException {
Thread.sleep(1000);
return "A constant from " + Thread.currentThread().getName();
}
});
Thread t = new Thread(f1);
t.start();
System.out.println("Calling Get " + Thread.currentThread().getName());
System.out.println(f1.get());
System.out.println("Got Get");
会给你输出:
调用获取主
来自 Thread-0 的常量
得到了
添加回答
举报