亚洲激情专区-91九色丨porny丨老师-久久久久久久女国产乱让韩-国产精品午夜小视频观看

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

java線程的創建方式

發布時間:2020-06-24 11:03:18 來源:億速云 閱讀:147 作者:Leah 欄目:編程語言

這篇文章將為大家詳細講解有關java線程的創建方式,小編覺得挺實用的,因此分享給大家做個參考,希望大家閱讀完這篇文章后可以有所收獲。

1、繼承Thread類實現多線程

2、覆寫Runnable()接口實現多線程,而后同樣覆寫run()。推薦此方式

3、使用Callable和Future創建線程

實例如下:

1、繼承Thread類實現多線程

/*
 * 繼承Thread類創建線程
 * 1、重寫run方法
 * 2、創建thread類的實例,即創建線程對象
 * 3、調用線程對象的start()來啟動該線程
 * 注意:Thread類的每個進程之間不能共享該實例變量;具有單繼承局限
 * */
public class StartThread extends Thread{
 
 private int i;
 @Override
 //重寫run方法
 public void run() {
  // TODO Auto-generated method stub
  for(i=0;i<10;i++) {
   System.out.println(getName()+"  "+i);
   
  }
 }
 public static void main(String[] args) {
  for(int i=0;i<10;i++) {
   System.out.println(Thread.currentThread().getName()+ " ,"+i);
   //創建thread類的實例
   StartThread h2=new StartThread();
   StartThread h3=new StartThread();
   if(i==2) {
    //啟動第一個進程
    h2.start();
    //啟動第二個進程
    h3.start();
    
   }
   
  }
 }
 
}

2、覆寫Runnable()接口實現多線程,而后同樣覆寫run()

定義Runnable()接口的實現類,重寫Run()方法。

創建Runnable實現類的實例,并以此實例作為Thread的target來創建Thread對象。這個Thread對象才是真正的線程對象

通過調用線程對象的start()方法來啟動線程

/*創建線程方式二
 * 1、創建:實現Runnable+重寫run
 * 2、啟動:創建實現類對象+Thread對象+start
 * 
 * 注意:推薦使用,避免單繼承的局限性,優先使用接口
 * 方便共享資源
 * */

public class MyThread2 implements Runnable {//實現Runnable接口
  public void run(){
  //重寫run方法
  // TODO Auto-generated method stub
  //當線程類實現Runnable接口時
  //如果想要獲取當前線程,只能使用Thread.currentThread方法
  for(;i<100;i++)
  {
   System.out.println(Thread.currentThread().getName()+" "+i);
  }  
  
}

public class Main {
  public static void main(String[] args){
    //啟動線程1
      //不像繼承Thread類一樣,直接可以實例化對象即可,Runnable接口必須要
     //先創建實例,再將此實例作為Thread的target來創建Thread對象
    //創建并啟動線程
    MyThread2 myThread=new MyThread2();

    Thread thread=new Thread(myThread);

    thread().start();

    //或者    new Thread(new MyThread2()).start();
  }
}

3、使用Callable和Future創建線程

和Runnable接口不一樣,Callable接口提供了一個call()方法作為線程執行體,call()方法比run()方法功能要強大。

call()方法可以有返回值

call()方法可以聲明拋出異常

public class Main {

  public static void main(String[] args){

   MyThread3 th=new MyThread3();

   //使用Lambda表達式創建Callable對象

     //使用FutureTask類來包裝Callable對象
   FutureTask<Integer> future=new FutureTask<Integer>(
    (Callable<Integer>)()->{
      return 5;
    }
    );
     //實質上還是以Callable對象來創建并啟動線程
   new Thread(task,"有返回值的線程").start();

    try{
       //get()方法會阻塞,直到子線程執行結束才返回
    System.out.println("子線程的返回值:"+future.get());
    }catch(Exception e){
    ex.printStackTrace();
   }
  }
}

關于java線程的創建方式就分享到這里了,希望以上內容可以對大家有一定的幫助,可以學到更多知識。如果覺得文章不錯,可以把它分享出去讓更多的人看到。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

长治市| 萨迦县| 磴口县| 九龙县| 内江市| 平乐县| 天长市| 任丘市| 华蓥市| 铜山县| 工布江达县| 惠来县| 北辰区| 福清市| 晋宁县| 昌黎县| 抚松县| 宁乡县| 浪卡子县| 齐齐哈尔市| 靖远县| 泰安市| 南江县| 炉霍县| 府谷县| 美姑县| 万盛区| 宁津县| 博兴县| 根河市| 雷波县| 惠来县| 突泉县| 陆良县| 建昌县| 台南县| 景洪市| 嘉善县| 达孜县| 涿州市| 舞阳县|