线程创建方法
-
继承Thread类创建线程类。(不能多次继承)
继承Thread类,创建一个新的线程类。
同时重写run()方法,将需要并发执行的业务代码编写在run()方法中。 -
实现Runnable接口创建线程目标类。(可多次继承)
定义一个新类实现Runnable接口。
实现Runnable接口中的run()抽象方法,将线程代码逻辑存放在该run()方法中。
通过Thread类创建线程对象,将Runnable实例作为实际参数传递给Thread类的构造器,由Thread构造器将该Runnable实例赋值给自己的target执行目标属性。
调用Thread实例的start()方法启动线程。
线程启动之后,线程的run()方法将被JVM执行,该run()方法将调用target属性的run()方法,从而完成Runnable实现类中业务代码逻辑的并发执行。 -
使用Callable和FutureTask创建线程(与Runnable不同的是它的run有返回值)
创建一个Callable接口的实现类,并实现其call()方法,编写好异步执行的具体逻辑,可以有返回值。
使用Callable实现类的实例构造一个FutureTask实例。
使用FutureTask实例作为Thread构造器的target入参,构造新的Thread线程实例。
调用Thread实例的start()方法启动新线程,启动新线程的run()方法并发执行。其内部的执行过程为:启动Thread实例的run()方法并发执行后,会执行FutureTask实例的run()方法,最终会并发执行Callable实现类的call()方法。
调用FutureTask对象的get()方法阻塞性地获得并发线程的执行结果。 -
通过线程池创建