创建线程的方式
创建线程有四种方式:
(1)继承Thread类重写run()方法,调用start()方法启动线程。
(2)实现Runable接口,实现run()方法。
(3)实现Callable接口,实现call()方法。
(4)线程池创建线程。
为什么要使用线程池:减少线程的上下文切换带来的损耗、减少创建线程和销毁线程带来的损耗、充分利用CPU资源。
实现Runable接口和实现Callable接口创建线程的区别:
实现Runable接口实现的run()方法没有返回值,因此这种方法不能获取线程执行的返回值,而实现Callable接口实现的call()方法有返回值,可以搭配FutureTask调用FutureTask.get()可以获取线程执行的结果。
启动线程为什么要执行start()方法而不是执行run()方法的原因:
执行start()方法才是启动线程,线程启动后会由该线程去执行run()方法。而直接调用run()方法只是有主线程去执行,相当于执行一个普通方法。