91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

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

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

Java如何向線程傳遞數據

發布時間:2022-05-23 16:09:20 來源:億速云 閱讀:294 作者:iii 欄目:大數據

這篇“Java如何向線程傳遞數據”文章的知識點大部分人都不太理解,所以小編給大家總結了以下內容,內容詳細,步驟清晰,具有一定的借鑒價值,希望大家閱讀完這篇文章能有所收獲,下面我們一起來看看這篇“Java如何向線程傳遞數據”文章吧。

一、通過構造方法傳遞數據

在創建線程時,必須要建立一個Thread類的或其子類的實例。因此,我們不難想到在調用start方法之前通過線程類的構造方法將數據傳入線程。并將傳入的數據使用類變量保存起來,以便線程使用(其實就是在run方法中使用)。下面的代碼演示了如何通過構造方法來傳遞數據:

package mythread;   public class MyThread1 extends Thread  {      private String name;       public MyThread1(String name)      {          this.name = name;      }      public void run()      {          System.out.println("hello " + name);      }      public static void main(String[] args)      {          Thread thread = new MyThread1("world");          thread.start();              }  }

由于這種方法是在創建線程對象的同時傳遞數據的,因此,在線程運行之前這些數據就就已經到位了,這樣就不會造成數據在線程運行后才傳入的現象。如果要傳遞更復雜的數據,可以使用集合、類等數據結構。使用構造方法來傳遞數據雖然比較安全,但如果要傳遞的數據比較多時,就會造成很多不便。由于Java沒有默認參數,要想實現類似默認參數的效果,就得使用重載,這樣不但使構造方法本身過于復雜,又會使構造方法在數量上大增。因此,要想避免這種情況,就得通過類方法或類變量來傳遞數據。

二、通過變量和方法傳遞數據

向對象中傳入數據一般有兩次機會,***次機會是在建立對象時通過構造方法將數據傳入,另外一次機會就是在類中定義一系列的public的方法或變量(也可稱之為字段)。然后在建立完對象后,通過對象實例逐個賦值。下面的代碼是對MyThread1類的改版,使用了一個setName方法來設置name變量:

package mythread;   public class MyThread2 implements Runnable  {      private String name;       public void setName(String name)      {          this.name = name;      }      public void run()      {          System.out.println("hello " + name);      }      public static void main(String[] args)      {          MyThread2 myThread = new MyThread2();          myThread.setName("world");          Thread thread = new Thread(myThread);          thread.start();      }  }

三、通過回調函數傳遞數據

上面討論的兩種向線程中傳遞數據的方法是最常用的。但這兩種方法都是main方法中主動將數據傳入線程類的。這對于線程來說,是被動接收這些數據的。然而,在有些應用中需要在線程運行的過程中動態地獲取數據,如在下面代碼的run方法中產生了3個隨機數,然后通過Work類的process方法求這三個隨機數的和,并通過Data類的value將結果返回。從這個例子可以看出,在返回value之前,必須要得到三個隨機數。也就是說,這個value是無法事先就傳入線程類的。

package mythread;   class Data  {      public int value = 0;  }  class Work  {      public void process(Data data, Integer numbers)      {          for (int n : numbers)          {              data.value += n;          }      }  }  public class MyThread3 extends Thread  {      private Work work;       public MyThread3(Work work)      {          this.work = work;      }      public void run()      {          java.util.Random random = new java.util.Random();          Data data = new Data();          int n1 = random.nextInt(1000);          int n2 = random.nextInt(2000);          int n3 = random.nextInt(3000);          work.process(data, n1, n2, n3);   // 使用回調函數          System.out.println(String.valueOf(n1) + "+" + String.valueOf(n2) + "+"                 + String.valueOf(n3) + "=" + data.value);      }      public static void main(String[] args)      {          Thread thread = new MyThread3(new Work());          thread.start();      }  }

在上面代碼中的process方法被稱為回調函數。從本質上說,回調函數就是事件函數。在Windows API中常使用回調函數和調用API的程序之間進行數據交互。因此,調用回調函數的過程就是最原始的引發事件的過程。在這個例子中調用了process方法來獲得數據也就相當于在run方法中引發了一個事件。

以上就是關于“Java如何向線程傳遞數據”這篇文章的內容,相信大家都有了一定的了解,希望小編分享的內容對大家有幫助,若想了解更多相關的知識內容,請關注億速云行業資訊頻道。

向AI問一下細節

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

AI

建水县| 林甸县| 鄱阳县| 嵩明县| 定边县| 延川县| 水富县| 政和县| 馆陶县| 西贡区| 深圳市| 永清县| 光山县| 宝坻区| 衡山县| 富蕴县| 二连浩特市| 恩施市| 子洲县| 深水埗区| 东阳市| 都江堰市| 临夏市| 北宁市| 将乐县| 凌云县| 浏阳市| 沁阳市| 林甸县| 西贡区| 昌宁县| 驻马店市| 光山县| 泰来县| 右玉县| 南郑县| 浠水县| 娄烦县| 苍梧县| 东至县| 鄯善县|