首頁  >  文章  >  Java  >  多線程-線程的創建

多線程-線程的創建

王林
王林轉載
2019-08-22 16:04:272672瀏覽

執行緒的建立方式

總結多執行緒的建立方式,多執行緒的實作一共四種方法,接下來將詳談一下建立的方式

#1、繼承Thread類,而後覆寫run()方法

2、實作Runnable接口,而後覆寫run()方法

3、實作callable接口,而後覆寫calldaed541be57f7e1197efbbe903a12eec方法

4、線程池(後面專門說,因為較複雜)

注意:無論使用哪種方式創建線程,啟動線程一律使用Thread類別提供的start ()方法。

1.繼承Thread類別覆寫run方法

#
class MyThread extends Thread {
    private String title;
    private int ticket = 20;
 
    public MyThread(String title) {
        this.title = title;
    }
 
    public void run() {  //放每个线程的子任务
        while (ticket > 0) {
            System.out.println("当前线程为"+title+",还剩下"+ticket--+"票");
        }
    }
}
 
public class ThreadTest {
    public static void main(String[] args) {
        MyThread myThread1 = new MyThread("黄牛A");
        MyThread myThread2 = new MyThread("黄牛B");
        MyThread myThread3 = new MyThread("黄牛C");
        myThread1.start();
        myThread2.start();
        myThread3.start();
    }
}

2.實作Runnable介面覆寫run方法 

class MyRunnable implements Runnable{
    @Override
    public void run() {
      for(int i =0;i <10;i++){
          System.out.println(Thread.currentThread().getName()+"、i="+i);
      }
    }
}
public class RunnableTest {
    public static void main(String[] args) {
       Runnable runnable =new MyRunnable();      //向上转型
        new Thread(runnable,"线程A").start();    //设置线程名字
        new Thread(runnable).start();     //没有设置线程名字,则是系统默认从 Thread-(0,1,2...)
        Thread thread1 = new Thread(runnable);
        thread1.setName("线程B");        //调用setName()设置名字
        thread1.start();
    }
}

這裡呢順便介紹了線程名字的創建3種:

(1)在括號後直接加名字

(2)調用setName()設置名字

(3)不設定名字,則是系統預設從Thread-(0,1,2....)


3.實作Callable介面覆寫calld94943c0b4933ad8cac500132f64757f方法 

class MyCallable implements Callable<String>{
    private int ticket =20;
    @Override
    public String call() throws Exception {
        while(ticket > 0){
            System.out.println(Thread.currentThread().getName()+"还剩下"+ticket--+"票");
        }
        return "票卖完了,再见";
    }
}
public class CallableTest {
    public static void main(String[] args) throws ExecutionException, InterruptedException {
        //产生Callable对象
        MyCallable myCallable = new MyCallable();
        //产生FutureTask对象
        FutureTask futureTask = new FutureTask(myCallable);
        Thread thread = new Thread(futureTask);
        thread.start();
        System.out.println(futureTask.get()); //接收Callable对象的返回值
    }
}

1.先產生Callable物件

2.產生FutureTask物件

3.建立Thread傳入FutureTask物件

4. 接收Callable介面的回傳值是Future中get()方法

三個建立執行緒的方式比較 

#1 .繼承Thread類別有單一繼承局限,相對而言實作Runnable介面更加靈活,並且Thread類別本身也實作了Runnable介面輔助真實執行緒類別

2.實作Runnable介面可以更好的實作程式共享的概念

3.Callable介面就是需要有回傳值時用到

以上內容若有明顯錯誤請指出,不勝感激。謝謝!

更多相關內容請上PHP中文網:JAVA影片教學

#

以上是多線程-線程的創建的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文轉載於:csdn.net。如有侵權,請聯絡admin@php.cn刪除