Java创建线程的三种方式及其对比

时间:2025-03-02 13:46:56

Java中创建线程主要有三种方式:

一、继承Thread类创建线程类

①定义Thread类的子类,并重写run方法。

②创建Thread子类的实例。

③调用start()方法。

访问当前线程:().

二、通过Runnable接口创建线程类

同上,只是改为定义runnable接口的实现类。

启动 new Thread(Runnable r,String name).start();

例:

new Thread(new Run(),"r1").start();
Run为Runnable接口的实现类。或者写为:

package thread;

public class Main {

	public static void main(String[] args) {
		new Thread(new Runnable(){
			@Override
			public void run() {
				("run()");
			}},"r1").start();
	}

}
接口不可实例化,所以参数必须为实现接口的类或匿名类。

三、通过CallableFutureTask创建线程

①创建Callable接口的实现类,并实现call()方法,该call()方法将作为线程执行体,并且有返回值

②创建Callable实现类的实例,使用FutureTask类来包装Callable对象,该FutureTask对象封装了该Callable对象的call()方法的返回值

③使用FutureTask对象作为Thread对象的target创建并启动新线程。

④调用FutureTask对象的get()方法来获得子线程执行结束后的返回值

例:

package thread;

import ;

public class MyCallable implements Callable<Integer>{

	@Override
	public Integer call() throws Exception {
		// TODO Auto-generated method stub
		return 1111;
	}

}
package thread;

import ;
import ;

public class Main{
	public static void main(String[] args) {
		FutureTask<Integer> ft = new FutureTask<>(new MyCallable());
		new Thread(ft).start();
		try {
			(());
		} catch (InterruptedException e) {
			// TODO Auto-generated catch block
			();
		} catch (ExecutionException e) {
			// TODO Auto-generated catch block
			();
		}
	}
}

使用接口实现线程的好处:

多个线程可共享一个target对象,所以非常适合多个相同线程来处理同一份资源的情况,从而将CPU、代码和数据分开,形成清晰的模型,较好地体现了面向对象的思想。


参考:/longshengguoji/article/details/41126119