1. 程式人生 > 其它 >Java中建立多執行緒的三種方式

Java中建立多執行緒的三種方式

技術標籤:Javajava多執行緒

目錄


一、繼承Thread類

繼承Thread類是Java中比較常見,也是很基礎的一種實現Java多執行緒的方式。實現的方式也比較簡單,只要將需要實現多執行緒的Java類繼承java.lang.Thread類即可。

class MyThread extends Thread{
       
    private String name;
 
    public MyThread(String name){
        this.name = name;
} @Override public void run() { Thread.currentThread().setName(name); System.out.println("I am Thread :" + name); } }

如上程式碼片段則是通過繼承Thread類實現多執行緒的方式之一。那麼多執行緒該如何呼叫呢?請接著閱讀下邊的程式碼。

public class startThread {

    public static void main(String[]
args) { //例項化繼承了Thread的類 MyThread thread1 = new MyThread("Thread1"); //通過從Thread類中所繼承的start()方法啟動執行緒; thread1.start(); } }

執行上邊的程式碼,可以得到結果:

在這裡插入圖片描述
到這裡,一個簡單的執行緒已經被啟動了。下邊我們接著介紹另外兩種多執行緒的實現方式。

二、實現Runnable介面

接下來請看這樣一種場景,DogRobot是一個用來看門的Dog,現在需要多個Dog分別把守不同的位置,但DogRobot一定要繼承Robot父類,此時應該如何實現多執行緒呢?


在這種場景下,可以通過實現Runable介面的方式來實現一個類的多執行緒。
我們知道,在Java中,類的繼承是單一的,即一個子類僅可以繼承一個父類(一個兒子只有一個爹,符合自然規律),但可以實現多個介面。那麼,通過Runable介面來實現多執行緒的好處自然不言而喻。
接下來看一下實現方式:

public class threadLearn {
   
    public static void main(String[] args)  {
        //例項化繼承了Thread的類
        MyThread thread1 = new MyThread("Thread1");
        //通過從Thread類中所繼承的start()方法啟動執行緒;
        thread1.start();  
        
        /*
         * 實現Runnable的類,需要將其放在一個Thread例項物件中,
         * 由Thread例項物件進行執行緒的啟動及控制。
         */
        Thread threadDog = new Thread(new DogRobot("kiki"));
        threadDog.start();
    }
}
 
class DogRobot extends Robot implements Runnable{
   
    private String name;
    public DogRobot(String name){
       super(name);
        this.name = name;
    }
    @Override
    public void run() {     
        Thread.currentThread().setName(name);
        System.out.println("I am DogRobot :" +name);    
    }
}
class Robot {
       
       private String Name;
       
       public Robot(String name){
              this.Name = name;
       }
       
}

輸出結果如下:

在這裡插入圖片描述
下邊接著講解第三種多執行緒的實現方式。

三、實現Callable介面

程式碼如下(示例):

/*
 * Callable介面實現多執行緒Demo
 */
class  MyCallable<V> implements Callable<V>
{
       @Override
       public V call() throws Exception {
              // TODO Auto-generated method stub
              System.out.println("I am Callable thread : "+Thread.currentThread().getName());
              return null;
       }
       
}

如何呼叫這個執行緒,使其執行任務呢?是需要通過FutureTask這個類的例項去排程,程式碼如下

public static void main(String[] args)  {

    /*
     * 使用Callable來建立執行緒
     */
    Callable <Integer> aCallable = new MyCallable<Integer>();
   
    FutureTask<Integer> aTask = new FutureTask<Integer>(aCallable);
   
    Thread aThread = new Thread(aTask);
   
    aThread.start();
}

我們執行一下程式,可以看到,執行的結果如下圖所示:
在這裡插入圖片描述
到這裡,一個通過Callable實現的介面便是成功了。

原文轉載於:https://www.cnblogs.com/wowostudy/p/8947670.html