四种方式创建线程:
- 继承Thread类
- 实现Runnable接口
- 应用程序使用Executor框架创建线程池
- 实现Callable接口
Runnable接口比Thread类的好处:
- Thread类继承存在单继承的局限性,而接口不会
- 体现数据共享的概念(JMM内存模型图),代码可以被多个线程共享,代码和数据独立
- 线程池只能放入实现Runnable或callable类的线程,不能直接放入继承Thread的类
- Runnable实现线程可以对线程进行复用,因为runnable是轻量级对象,而Thread不行,它是重量级对象