执行者接受线程作为输入

GD_*_*ava 1 java concurrency

我最近开始探索Java Executor框架.所有执行程序都设计为接受Runnable或Callable.为什么执行者不接受Thread作为输入?

isn*_*bad 6

在谈论并发时,始终区分线程任务非常重要.

  • 任务只是一块工作应该做-通常表示为Runnable(或Callable在情况下的任务产生的结果).

  • 线程是使得一个机构的任务并行地执行.

一个Executor或是ExecutorService一个能够执行任务的工具.根据实现,此执行程序可能能够并行执行多个任务 - 通常是在内部使用线程.

因此,如果您正在使用ExecutorExecutorService,您将交付任务,因此Runnable执行并让执行程序为您管理其线程.

注意:作为java.lang.Thread实现Runnable,可以实例化a Thread并将其传递给execute(...).这是一件非常糟糕的事情,因为执行程序只会调用run()线程的方法,就像它是一个任务一样,并且不会启动线程.它不被认为是以这种方式使用 - 如果你在某个地方看到它:这是错的!