一、继承Thread类
重写run方法
创建Thread对象,调用start方法启动线程
二、实现Runnable接口
重写run方法
创建Thread对象,传入Runnable实现类对象
调用start方法
三、实现Callable接口(能够提供返回值)
创建FutureTask对象,传入Callable对象
创建Thread对象,传入FutureTask对象
调用Thread对象的start
调用FutureTask对象的get
注意:FutureTask对象既实现了Runnable接口,也组装了Callable接口;
四、使用线程池实现
创建线程池:
int core = Runtime.getRuntime().availableProcessors();
ExecutorService threadPool = new ThreadPoolExecutor(core,
core,
2,
TimeUnit.MINUTES,
new LinkedBlockingQueue<Runnable>(1_000_000),
new NamedThreadFactory("xxx"));
第一个参数:核心线程数;
第二个参数:最大线程数;
第三个参数:存活时间;
第四个参数:时间单位;
第五个参数:阻塞队列;
第六个参数:线程工厂;
还有一个参数:拒绝策略;
四大拒绝策略:
- AbortPolicy:任务被拒之后(在阻塞队列中也存不下了),抛出异常;
- DiscardPolicy:任务被拒之后,丢弃任务,不抛出异常;
- DiscardOldestPolicy:
- CallerRunsPolicy: