线程的实现方式
- 实现Runnable接口
public class RunnableThread implements Runnable {@Overridepublic void run() {System.out.println("用实现Runnable接口实现线程");}}
- 继承Thread类
public class ExtendsThread extends Thread {@Overridepublic void run() {System.out.println("用Thread类实现线程");}}
- 线程池创建线程
创建线程池设置多个子线程,就会有多个子线程来实现线程创建,默认通过实现线程工厂DefaultThreadFactory来创建线程,并设置一些默认值,本质还是通过new Thread()创建线程。
ExecutorService service = Executors.newFixedThreadPool(10);
- 有返回值的Callable创建线程
public class CallableTask implements Callable<Integer> {@Overridepublic Integer call() throws Exception {return new Random().nextInt();}}// 创建线程池ExecutorService service = Executors.newFixedThreadPool(10);// 提交任务,返回结果Future<Integer> submit = service.submit(new CallableTask());
线程的本质
创建线程只有一种方式:构造Thread类
实现线程运行内容的方式的两种方式
方法一:实现
Runnable接口重写run()方法,并把Runnable实例作为target对象,传给Thread类,最终调用target.run()方式二:继承
Thread类,重写Thread的run()方法,Thread.start()最终会执行run()方法
实现方式的选择
实现Runnable接口要比继承Thread类要更好
- 可以把不同的内容进行解耦,权责分明
- 某些情况下可以提升性能,减小开销
- 继承Thread类相当于限制了代码的扩展性
