初始化线程的 4 种方式
1)、继承Thread
2)、实现 Runnable接口
3)、实现 Callable接口+FutureTask(可以拿到返回结果,可以处理异常)
4)、线程池
区别:
1. 继承Thread和实现Runnable不能得到返回值。实现Callable接口可以获取返回值并且处理异常问题
2. 继承Thread,实现 Runnable接口,实现 Callable接口都不能控制资源(无法控制线程数【高并发时线程数耗尽资源】)
3. 可以控制项目种的线程数量,性能稳定,不会一下子所有线程一起运行消耗全部资源
代码演示:
1)、 new Thread();
2)、new Thread(new Runnable());
3)、new Thread(new FutureTask(new Callable()));
4)、自定义原生线程池或者使用Executors提供的默认创建方法
1. 创建原生线程池ThreadPoolExecutor(值得注意是,需要把创建的对象放入ioc容器中即可)
new ThreadPoolExecutor(5,