欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

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

程序员文章站 2022-05-05 16:41:38
...

在线帮助文档: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类,这样才能启动多线程

 

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

范例:使用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()方法,可以有返回值。