Java多线程:Callable接口实现多线程

在线帮助文档:https://docs.oracle.com/javase/9/docs/api/java/util/concurrent/Callable.html

传统实现多线程一般依靠Runnable,但是Runnable接口有一个缺点:当线程执行完以后无法获取一个返回值。所以从JDK 1.5之后提出了一个新的线程实现接口:java.util.consurrent.Callable接口

接口定义:

@FunctionalInterface
public interface Callable<V>{
    public V call() throws Exception;
}

Callable和Thread类没有直接的关系,Callable的对象必须先封装到FutureTask中,然后在通过FutureTask传给Thread类,这样才能启动多线程

范例:使用Callable实现多线程处理

package threads;

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

class MyThread implements Callable<String>{	// 线程的主体类

	@Override
	public String call() throws Exception {	// 多线程要执行的功能应该在run()方法中进行定义
		for(int i = 0; i < 10; i++) {
			System.out.println("卖票,ticket = " + i);
		}
		return "线程执行完毕";
	}
}

public class Main {

	public static void main(String[] args) throws Exception {
		FutureTask<String> task = new FutureTask<>(new MyThread());
		new Thread(task).start();
		System.out.println("[线程返回数据]:  " + task.get());
		
	}
}

请解释Runnable与Callable的区别?

  • Runnable是JDK 1.0的时候提出的多线程实现接口,而Callable是在JDK 1.5之后提出的。
  • java.lang.Runnable接口中只提供有一个run()方法,并且没有返回值。
  • java.util.concurrent.Callable接口提供有call()方法,可以有返回值。
发布了238 篇原创文章 · 获赞 104 · 访问量 8万+

猜你喜欢

转载自blog.csdn.net/hpu2022/article/details/103255154