创建线程有几种方式
**1) 继承thread类:**本质是是实现了runnable接口的一个实例,代表一个线程的实例。启动线程的唯一方法就是通过tead类的start()死大特start()是一个native内体武方法它将启动一个新线程,执行run()
**2) 实现runnable接口:**如果自己的类已经extends 另一个类,就无法直接extends Thread,此时,可以实现一个Runnable 接口。
3) 实现卡了波callable接口:Callabled 接口有点像是Runnable 接口的增强版 ,它以call()方法作为线程执行体,call()方法比run()方法功能更强大。call()方法可以有返回
4) 通过线程池方法:常用的线程池有:
1).newSingleThreadExecutor:创建一个单线程的线程,按照任务的提交顺序执行
2).newFixedThreadPool:创建固定大小的线程池提交一个任务创建一个线程,直到达到线程池最大大小
3).newCachedThreadPool:创建一个可缓存的线程池,大小取决于jvm
4).newScheduledThreadPool:创建一个无限大小的线程池,支持定时和周期性执行任务
5).newSingleThreadExecutor:创建一个单线程的线程, 支持定时和周期性执行任务