熱點推薦:
您现在的位置: 電腦知識網 >> 編程 >> Java編程 >> Java高級技術 >> 正文

獲取java線程中信息的兩種方法[3]

2022-06-13   來源: Java高級技術 

    回調

    輪詢方法最大的特點是主類Main不斷詢問線程類是否結束這實際上大量浪費了運行時間特別是當線程特別多的時候因此如果反過來在線程結束時由線程自己告訴主類Main線程已經結束然後Main再獲取並輸出str的值這樣就避免了輪詢方法所帶來的不必要的系統開銷問題

    在具體的實現過程中線程可以在結束時通過調用主類中的一個方法來實現告知功能這種方法叫做回調這樣主類Main就可以在等待線程結束時休息也就不會占用運行線程的時間下面是修改後的Main類

 public class Main{
  public Main() {
  }
  /**
   * @param args the command line arguments
   */
  public static void main(String[] args) {
    // TODO code application logic here
    ReturnThreadInfo returnThreadInfo = new ReturnThreadInfo();
    returnThreadInfostart();
  }
  public static void receiveStr(String str){
    Systemoutprintln(str);
  }
}

    相比於前面我們在Main類中添加了一個靜態方法receiveStr(String str)該方法是供線程結束之前調用通過參數str將要返回的線程信息返回給Main類並輸出顯示出來下面是修改後的ReturnThreadInfo類該類在線程結束前回調了MainreceiveStr方法通知線程已結束

 package threadtest;
/**
*
* @author shi mingxiang
*/
public class ReturnThreadInfo extends Thread {
  private String str;
  public ReturnThreadInfo() {
    thisstr = Hello;
  }
  public void run(){
      thisstr = Hello World!;
   MainreceiveStr(str); //回調receiveStr方法
  }
}

    如果有很多個對象關心線程的返回的信息線程可以保存一個回調對象列表某個對象可以通過已經定義的一個對象將自己添加到列表中表示自己對這些信息的關注如果有多個類的實例關心這些信息也可以定義一個interface在interface中聲名回調方法然後這些類都實現這個接口其實這是典型的java處理事件的方法這麼做可以使得回調更靈活可以處理涉及更多線程對象和類的情況稍後會給出這種模仿事件處理模型的回調的實現方法

[]  []  []  


From:http://tw.wingwit.com/Article/program/Java/gj/201311/27712.html
    推薦文章
    Copyright © 2005-2022 電腦知識網 Computer Knowledge   All rights reserved.