多线程学习——JAVA三种线程的创建方式


Java中有三种线程创建方式,分别为继承Thread类并重写run的方法,实现Runnable接口的run方法,使用FutureTask方式。

1. 继承Thread类方式的实现。

public class Thread1 extends Thread {
    
    
	
	@Override
	public void run() {
    
    
		for(int i=1;i<=10;i++) {
    
    
			System.out.println("多线程执行中..."+i);
		}
	}

	public static void main(String[] args) {
    
    
		
		//创建线程
		Thread1 thread1=new Thread1();
		//启动线程
		thread1.start();
		
		for(int i=0;i<10;i++) {
    
    
			System.out.println("主线进行中..."+i);
		}

	}

}

在这里插入图片描述
上述代码中Thread1类继承了Thread类,并重写了run()方法,在main方法中创建了Thread1类的实例,并调用该对象start方法启动该线程,但此时该线程不一定马上执行,而是处于就绪状态,等待获取到CPU资源后才会运行。

2. 实现Runnable接口的run方法方式

public class RunnableTest1 implements Runnable {
    
    

	@Override
	public void run() {
    
    
		for(int i=1;i<=10;i++) {
    
    
			System.out.println("多线程执行中..."+i);
		}	
	}
	
	public static void main(String[] args) {
    
    
		RunnableTest1 runRunnableTest1=new RunnableTest1();
		
		new Thread(runRunnableTest1).start();
		
		for(int i=0;i<10;i++) {
    
    
			System.out.println("主线进行中..."+i);
		}

	}

}

在这里插入图片描述

3. 使用FutureTask方式

import java.util.concurrent.Callable;
import java.util.concurrent.ExecutionException;
import java.util.concurrent.FutureTask;

public class CallerTask implements Callable<String> {
    
    

	@Override
	public String call() throws Exception {
    
    
		return "Hello world";
	}
	
	public static void main(String[] args) {
    
    
		
		//创建异步任务
		FutureTask<String> futureTask = new FutureTask<String>(new CallerTask());
		//启动线程
		new Thread(futureTask).start();
		
		try {
    
    
			//等待任务执行完毕,并返回结果
			String result = futureTask.get();
			System.out.println(result);
		} catch (InterruptedException e) {
    
    
			e.printStackTrace();
		} catch (ExecutionException e) {
    
    
			e.printStackTrace();
		}

	}

}

在这里插入图片描述
上面代码中CallerTask类实现了Callable接口的call方法,在main方法中首先创建一个FutureTask对象,然后使用创建的FutureTask对象作为任务创建一个线程并调用start()方法启动该线程,最后通过futureTask.get()等待任务执行完毕并返回结果。
此方法相对于前两个方法的好处在于能够得到任务返回值。

猜你喜欢

转载自blog.csdn.net/swy66/article/details/108781578