题目:创建线程有几种方式?
难度:medium
标签:java/thread, general/knowledge
评分:⭐⭐⭐☆☆(3/5)
java创建线程可以通过thread来直接new创建,也可以通过实现runnable接口来实现,或者是从线程池中取用线程来实现,所有线程创建回收等操作由线程池来管控; 常规情况主要使用线程池来进行线程管控,可以更好的利用线程资源;
优点:答到 Thread 子类、Runnable、线程池三种,并指出工程上首选线程池。
不足:漏了 Callable + FutureTask(带返回值) 这条最常考的方式;也没说清 Runnable 与 Callable 的区别;没说"线程池本质也是复用 Thread/Runnable"。
补充:标准 4 种——继承 Thread、实现 Runnable、实现 Callable(配 FutureTask)、线程池(ExecutorService);Java 单继承限制决定了"实现接口"优于"继承 Thread"。
核心考点定位:能不能列出 4 种方式,并讲清继承 vs 接口、有无返回值的取舍。
知识点拆解:
run(),new 后 start()。受单继承限制,不推荐。call() 有返回值、可抛异常,需 FutureTask 包装(也实现了 Runnable)才能交给 Thread。ExecutorService.submit/execute,复用线程、可控并发,工程首选。考察方向:
Thread.start() → native start0() → JVM 创建内核线程延伸递进面试题:
【一句话结论】
面试官您好,创建线程标准有 4 种方式,实际开发首选线程池。
【三点展开】
第一,继承 Thread 重写 run,简单但受单继承限制;
第二,实现 Runnable / Callable——Callable 有返回值、能抛异常,要用 FutureTask 包装;
第三,线程池 ExecutorService 提交任务,线程复用、并发可控,是工程首选。
【一句边界】
当然,简单的一次性任务用 Runnable 就行,但生产环境不要裸 new Thread,也不要用 Executors 快捷工厂。