我试图了解在运行ExecutorService.Submit(可调用);
时如何创建future对象
class FactorialCalculator implements Callable<Long> {
private int number;
public FactorialCalculator(int number) {
this.number = number;
}
@Override
public Long call() throws Exception {
return (number*number);
}
}
class MyThreadPool implements java.util.concurrent.Executor
{
private final java.util.concurrent.BlockingQueue<Callable> queue;
public MyThreadPool(int numThreads) {
queue = new java.util.concurrent.LinkedBlockingQueue<>();
for (int i=0 ; i<numThreads ; i++) {
new Thread(new Runnable(){
@Override
public void run() {
while(true) {
queue.take().call();
}
}
}).start();
}
}
@Override
public void submit(Callable command) {
queue.put(command);
}
}
MyThreadPool mypool = new MyThreadPool(10);
mypool.submit(new FactorialCalculator(10));
最简单的方法是将可调用的代码封装在一个未来请求中:
@Override
public <T> Future<T> submit(Callable<T> callable) {
FutureTask<T> future = new FutureTask(callable);
queue.put(future);
return future;
}
当然,更简单的解决方案是使用executors.newfixedthreadpool
而不是自己重新实现它。
我创建了一个接口,以便可以在对话和片段之间进行通信。 目标:当用户从对话框中选择任何内容时,应将其显示在文本视图中。 在这个界面中,我创建了一个界面方法,在主活动中调用,并传递用户在对话框中选择的值。与用户选择的值一起,在我的片段中,我创建了一个方法,将文本视图设置为该值。然而,每当我调用该方法时,它总是返回null。 我对日志进行了大量测试,发现通过我的方法传递的值不是空的,一切似乎都按照我想要
我对类上的接口实现的理解是,接口类型引用实现接口的类的对象。 但是当我研究下面的代码片段在上面的代码中使用时… GetConnection(host,username,password)返回对对象的引用(类型为Connection),但DriverManager类中没有实现接口。谁能澄清我的这个疑问..?还是我漏掉了什么? 下面的代码段不能得到相同的东西 createStatement()应该返回
问题内容: 我正在尝试使我的第一个ajax示例在我的MAMP上运行。我的ajax.html看起来像: 我的ajax.js看起来像: 我的ajax.php看起来像: 回声“你好世界”; 我从萤火虫中检测到响应标头: 响应标头 连接Keep-Alive 内容长度11 Content-Type text / html 日期2012年11月5日星期一18:57:46 GMT Keep-Alive超时= 5
问题内容: 我正在尝试从call()返回2D数组,但遇到了一些问题。到目前为止,我的代码是: 这段代码会编译,这不会返回我的数组。我确定我可能使用了错误的语法,但是找不到任何好的示例。 编辑:改变了一点 问题答案: 添加到Joseph Ottinger的答案中,要传递要在Callable的call()方法中使用的值,可以使用闭包:
我有一个定义一些函数的接口IFoo,一个实现IFoo和一些内部函数的抽象类FooBase,还有几个从FooBase派生的类Foo。 我还有一个类Bar,它应该从FooBase调用一个方法,但是它的参数作为IFoo传递。所以所有的东西都是这样的: 如前所述,这感觉不对,因为任何人都可能会出现,编写一个实现IFoo的类Baz并用它调用DoSomething将会失败。 我还发现了这个问题/解决了一个类似