跳到主要内容

十八、Java并发 Java 之 Runnable 还是 Thread _

写Java 代码的时候,我们经常会有这样的疑问:我到底是实现一个 Runnable 呢,还是扩展一个 Thread 类?

你的答案是什么呢? 那有没有标准答案呢?

答案是什么呢?

我们先来分析下,看看哪种方法在实践中更有意义以及为什么?

扩展一个线程 ( Thread 类 )

简单起见,我们就来定义一个扩展自 ThreadSimpleThread

public class SimpleThread extends Thread {
private String message;
// standard logger, constructor
@Override
public void run() {
log.info(message);
}

代码也真是简单了,然后我们看看如何运行这个 SimpleThread 类

@Test
public void givenAThread_whenRunIt_thenResult()
throws Exception {
Thread thread = new SimpleThread(
"SimpleThread executed using Thread");
thread.start();
thread.join();

我们也可以把这个 SimpleThread 放到前面章节 一文秒懂 Java ExecutorService 中提到的 ExecutorService 中运行。

@Test
public void givenAThread_whenSubmitToES_thenResult()
throws Exception {
executorService.submit(new SimpleThread(
"SimpleThread executed using ExecutorService")).get();

看起来感觉是不是有点复杂,我们只想在单独的线程中运行单个日志操作而已,使用 Thread 的方式看起来有点复杂化了,要么是 start() 和 join() ,要么是 ExecutorService。