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

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章