多线程的实现方式有哪些?
1、继承Thread类,重写run方法来实现多线程
2、继承Runnable接口实现多线程
重写run方法,实现Runnable接口的实现类的实例对象作为Thread构造函数的target
3、通过Callable 和 FutureTask创建线程
3.1 创建Callable接口的实现类 ,实现它的Call方法
3.2 使用FutureTask类来包装Callable对象,这个FutureTask对象需要封装Callable对象的Call方法的返回值
3.3 使用FutureTask对象作为Thread对象的target创建并调用start方法启动线程
4、通过线程池实现多线程
而线程池的实现方式有哪些?
首先是jdk自带的继承自Executor实现多线程的四个api
newCachedThreadPool(缓存线程池)
newFixedThreadPool(可定长度线程池)
newScheduledThreadPool(可定时线程池)
newSingleThreadExecutor(单例线程池)
而我们一般不使用这几种方式去创建线程池,为什么呢?
首先我们要知道他们的底层是怎么实现的
可以看到底层都是实现ThreadPoolExecutor的构造方法来构建ThreadPoolExecutor对象。
newCachedThreadPool而他的队列长度被默认设置int类型最大长度的线程数量,会导致cpu飙升问题。