如何在我自己的线程池实现中使用Future和Callable

时间:2015-06-19 13:08:35

标签: java multithreading thread-safety future callable

我正在尝试用Java实现我自己的线程池(用于教学目的)。

在我的线程池类中,我有这个方法:

public Future submit (Task task) { //(Task implements Callable<String>)
    FutureTask<String> futureTask = new FutureTask<String>(task);
    taskQueue.put(task); //It is a BlockingQueue
    return futureTask;
}

我将Task包装到FutureTask中,将其放入同步队列并立即返回FutureTask。

当我尝试向池中添加任务时,我会这样做:

   Future<String> futureTask = threadPool.submit(new Task(/*arguments*/));
   //In theory, I could do something else here
   String taskRes = futureTask.get();

我在一些线程上使用上面的代码,但futureTask.get()永远不会返回。

我的主题是这样的:

public void run() {
  Task task = taskQueue.take();
  task.call();
}

我使用Future和Callable的方式是否存在逻辑错误?

我的意思是在一个线程中将Task包装到FutureTask中,但在另一个线程中调用它。由于某些原因,futureTask.get()无法获取task.call()的返回值。

0 个答案:

没有答案