第一种方式:使用Runnable接口创建线程
第二种方式:直接继承Thread类创建对象
使用Runnable接口创建线程
1.可以将CPU,代码和数据分开,形成清晰的模型
2.线程体run()方法所在的类可以从其它类中继承一些有用的属性和方法
3.有利于保持程序的设计风格一致
直接继承Thread类创建对象
1.Thread子类无法再从其它类继承(java语言单继承)。
2.编写简单,run()方法的当前对象就是线程对象,可直接操作。
在实际应用中,几乎都采取第一种方式
第三种:实现Callable接口
call方法和run方法一样,但是会返回一个值,使用Future来获取这个返回值,Future提供了相应的方法来判断是否已经完成或者取消,以及获取任务的结果。结合Executor和ExecutorService.submit()来提交Callable接口实现的方法。
第四种:线程池