1. 程式人生 > >建立執行緒的第三種方式:實現Callable介面

建立執行緒的第三種方式:實現Callable介面

以前建立執行緒有兩種方式:一種是繼承Thread類,重寫run()方法;另一種就是實現runnable介面的run()方法。我們先來看看這兩種方式的實現。  

1、繼承Thread類
package com.jdk8.Thread;

public class ThreadDemo extends Thread{

    @Override
    public void run() {
        for(int i = 0 ; i < 5 ; i++){
            try {
                Thread.sleep(1000);
            } catch
(InterruptedException e) { e.printStackTrace(); } System.out.println(Thread.currentThread().getName()); } } public static void main(String[] args) { ThreadDemo td = new ThreadDemo(); td.start(); System.out.println("main thread"
); } }

執行結果:

main thread
Thread-0
Thread-0
Thread-0
Thread-0
Thread-0

2、實現Runnable介面

package com.jdk8.Thread;

public class RunnableDemo implements Runnable {

    public static void main(String[] args) {
        new Thread(new RunnableDemo()).start();
        System.out.println("main thread"
); } @Override public void run() { for (int i = 0; i < 5; i++) { try { Thread.sleep(1000); } catch (InterruptedException e) { e.printStackTrace(); } System.out.println(Thread.currentThread().getName()); } } }

執行結果:

main thread
Thread-0
Thread-0
Thread-0
Thread-0
Thread-0

以上兩種建立執行緒的方式,run()方法都是void,不能返回值。
Callable介面自帶泛型,call()方法的返回值要跟介面的泛型一致

3、實現Callable介面,結合Future

package com.jdk8.Thread;

import java.util.concurrent.Callable;
import java.util.concurrent.ExecutionException;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
import java.util.concurrent.Future;

public class CallableDemo implements Callable<String> {

    @Override
    public String call() throws Exception {
        for (int i = 0; i < 5; i++) {
            Thread.sleep(1000);
            System.out.println(Thread.currentThread().getName() + ":" + i);
        }
        return "over";
    }

    public static void main(String[] args) {
        ExecutorService pool = Executors.newCachedThreadPool();
        Future<String> f = pool.submit(new CallableDemo());
        try {
            System.out.println(f.get());
        } catch (InterruptedException e) {
            e.printStackTrace();
        } catch (ExecutionException e) {
            e.printStackTrace();
        } finally {
            pool.shutdown();
        }
        System.out.println("main thread");
    }
}

執行結果:

pool-1-thread-1:0
pool-1-thread-1:1
pool-1-thread-1:2
pool-1-thread-1:3
pool-1-thread-1:4
over
main thread

從上面的結果可以看出,f.get()方法可以獲取到執行緒的返回結果,並且會阻塞當前執行緒,直到執行緒執行完拿到返回結果之後,main執行緒才繼續執行。

相關推薦

建立執行方式實現Callable介面

以前建立執行緒有兩種方式:一種是繼承Thread類,重寫run()方法;另一種就是實現runnable介面的run()方法。我們先來看看這兩種方式的實現。 1、繼承Thread類 package com.jdk8.Thread; public c

JAVA併發程式設計(五)建立執行方式實現Callable介面

眾所周知建立執行緒的方式有兩種:1.繼承Thread類。2.實現Runnable介面。從jdk1.5開始,提供了另一種建立執行緒的方式。今天我們就來看看這第三種方式:實現Callable介面 一、Callable與Runnable 我們直接來看一個使用C

建立執行的第二方法實現Runnable介面

package thread; public class ThreadDemo3 {  /**   * @執行緒示例:   * 需求:簡單的賣票程式。   * 多個視窗賣票。   *   * 建立執行緒的第二種方式:實現Runnable介面   *   * 步驟:  

併發程式設計學習總結(一) java 建立執行方式的優缺點和例項

java 建立執行緒有三種方式: (一)  實現Runnable介面          優點:(1) 建立執行緒的同時可以繼承其他的類,從而可以擴充套件類的功能。                  

C++ STL 建立執行方式

使用 stl thread 編寫多執行緒程式時,編譯需要加 -pthread 通過函式指標建立執行緒 #include <iostream> #include <thread> using namespace std; void func(int id

java多執行(二):建立執行方式以及優缺點總結

一、Java中建立執行緒主要有三種方式: 1、繼承Thread類建立執行緒類 步驟: (1)定義Thread類的子類,並重寫該類的run方法,該run方法的方法體就代表了執行緒要完成的任務。因此把run()方法稱為執行體。 (2)建立Thread子類的例項,即建立了執行緒物件。

Java建立執行方式

繼承Thread (1)定義Thread類的子類,重寫該類的run方法,該run方法的方法體就代表了執行緒要完成的任務。因此把run()方法稱為執行體。 (2)建立Thread子類的例項,即建立了執行緒物件。 (3)呼叫執行緒物件的start()方法來啟動該執行緒。

Java多執行-----建立執行方式

   1.繼承Thread類建立執行緒 定義Thread類的子類,並重寫該類的run()方法,該方法的方法體就是執行緒需要完成的任務,run()方法也稱為執行緒執行體 建立Thread子類的例項,也就是建立了執行緒物件 啟動執行緒,即呼叫執行緒的start()方法

建立執行方式和區別

Java使用Thread類代表執行緒,所有的執行緒物件都必須是Thread類或其子類的例項。Java可以用三種方式來建立執行緒,如下所示: 1)繼承Thread類建立執行緒 2)實現Runnable介面建立執行緒 3)使用Callable和Future建立執行緒 下面讓我們分別來看看這三種建立執行緒的方法。

Java建立執行方式以及優劣對比

Java使用Thread類代表執行緒,所有的執行緒物件都必須是Thread類或者其子類例項。每個執行緒的作用是完成一定的任務,實際上是執行一段程式流 #1. 繼承Thread類建立執行緒類     通過繼承Thread類來建立並啟動多執行緒的步驟如下: 定

Java建立執行方式及其對比

Java中建立執行緒主要有三種方式: 一、繼承Thread類建立執行緒類 (1)定義Thread類的子類,並重寫該類的run方法,該run方法的方法體就代表了執行緒要完成的任務。因此把run()方法稱為執行體。 (2)建立Thread子類的例項,即建立了執行緒物

Java 建立執行方式及其對比

Java中建立執行緒主要有三種方式: 一、繼承Thread類建立執行緒類 (1)定義Thread類的子類,並重寫該類的run方法,該run方法的方法體就代表了執行緒要完成的任務。因此把run()方法稱為執行體。 (2)建立Thread子類的例項,即建立了執行緒物件。 (3)呼

java多執行建立執行方式優缺點

Java使用Thread類代表執行緒,所有的執行緒物件都必須是Thread類或其子類的例項。  一、繼承Thread類建立執行緒類  1.重寫run方法。該run()方法的方法體就代表了執行緒需要完成的任務。  2.建立Thread子類的例項。  3.呼叫執行緒物件的st

執行學習(一)——建立執行方式及比較

最近在學習多執行緒,在這裡總結一下學習到的內容(參考《瘋狂Java講義第3版》):一、建立執行緒有三種方式:      1、繼承Thread類      2、實現Runnable介面      3、使用Callable和Future二、分別介紹用法:繼承Thread類/*下面

詳解及對比建立執行方式

一.Java建立執行緒的三種方式 Java中建立執行緒主要有三種方式: 1.繼承Thread類 2.實現Runnable介

【併發那些事 】建立執行方式

建立執行緒可以說是併發知識中最基礎的操作了,JDK 提供的建立執行緒的方式,如果不包括通過執行緒池的話,目前有三種形式,它們分別是通過繼承 Thread 類,通過實現 Runable 介面,通過 FutureTask。如下圖所示 下面整理了一下 3 種方法的具體使用與異同。 建立執行緒的 3 種方法

Java建立一個多執行方式

步驟一:執行緒概念 首先要理解程序(Processor)和執行緒(Thread)的區別 程序:啟動一個LOL.exe就叫一個程序。 接著又啟動一個DOTA.exe,這叫兩個程序。 執行緒:執行緒是在程序內部同時做的事情,比如在LOL裡,有很多事情要同時做,比如"蓋倫” 擊殺“

建立執行方式

執行緒是指程序內部同時做的事情,比如在玩王者榮耀的時候,你可以同時攻擊英雄A和英雄B; 下面將此作為例子,引入三種建立多執行緒的方式; 例子思路:                  ①先建立英雄類(Hero)設定三個屬性:name(英雄名)、hp(英雄的血量)、dama

JAVA 建立一個執行方式

建立多執行緒-實現Runnable介面 建立類Battle,實現Runnable介面 啟動的時候,首先建立一個Battle物件,然後再根據該battle物件建立一個執行緒物件,並啟動   Battle battle1 = new Battle(gareen,teemo); new Thread(battle1

50、多執行建立方式實現Runnable介面

實現Runnable介面建立執行緒 使用Runnable建立執行緒步驟: package com.sutaoyu.Thread; //1.自定義一個類實現java.lang包下的Runnable介面 class MyRunnable implements Runnable{ /