CS-Notes 学习笔记
面试常问Java 后端 · Java 并发

创建线程有哪几种方式?直接调用 run() 和调用 start() 有什么区别?

先自己想一想,再看参考要点

参考要点

  • 实现 Runnable、实现 Callable、继承 Thread,实际开发中更常把任务提交给线程池
  • Callable 的 call() 可以有返回值、可以抛出受检异常,要包装成 FutureTask 交给 Thread,用 get() 等待结果
  • 实现接口更好:Java 不支持多重继承,而且任务与线程解耦,可以交给线程池执行
  • 调用 start() 后 JVM 才向操作系统创建线程(Linux 上是 pthread_create)并分配线程栈,新线程获得 CPU 后执行 run()
  • 直接调用 run() 只是在当前线程中执行一个普通方法,同一个 Thread 对象只能 start() 一次,再次调用抛出 IllegalThreadStateException
在学习站中自测这道题

学习站:先用面试题自评定级,按水平和面试日期排出每天的计划,自评过的题按间隔复习。免费、无需注册,记录只保存在自己的浏览器中。