国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學(xué)院 > 開發(fā)設(shè)計 > 正文

java線程簡介(無處不在的線程)

2019-11-18 10:47:45
字體:
供稿:網(wǎng)友

  1、誰創(chuàng)建線程?
  
  
  即使您從未顯式地創(chuàng)建一個新線程,您仍可能會發(fā)現(xiàn)自己在使用線程。線程被從各種來源中引入到我們的程序中。
  
  有許多工具可以為您創(chuàng)建線程,假如要使用這些工具,應(yīng)該了解線程如何交互,以及如何防止線程互相干擾。
  
  2、AWT 和 Swing
  
  
  任何使用 AWT 或 Swing 的程序都必須處理線程。AWT 工具箱創(chuàng)建單個線程,用于處理 UI 事件,任何由 AWT 事件調(diào)用的事件偵聽器都在 AWT 事件線程中執(zhí)行。
  
  您不僅必須關(guān)心同步對事件偵聽器和其它線程之間共享的數(shù)據(jù)項的訪問,而且還必須找到一種方法,讓由事件偵聽器觸發(fā)的長時間運行任務(wù)(如在大文檔中檢查拼寫或在文件系統(tǒng)中搜索一個文件) 在后臺線程中運行,這樣當(dāng)該任務(wù)運行時,UI 就不會停滯了(這可能還會阻止用戶取消操作)。這樣做的一個好的框架示例是 SwingWorker 類
  AWT 事件線程并不是守護(hù)程序線程;這就是通常使用 System.exit() 結(jié)束 AWT 和 Swing 應(yīng)用程序的原因。
  
  
  3、使用 TimerTask
  
  
  JDK 1.3 中,TimerTask 工具被引入到 java 語言。這個便利的工具讓您可以稍后在某個時間執(zhí)行任務(wù)(例如,即從現(xiàn)在起十秒后運行一次任務(wù)),或者定期執(zhí)行任務(wù)(即,每隔十秒運行任務(wù))。
  
  實現(xiàn) Timer 類非常簡單:它創(chuàng)建一個計時器線程,并且構(gòu)建一個按執(zhí)行時間排序的等待事件隊列。
  
  TimerTask 線程被標(biāo)記成守護(hù)程序線程,這樣它就不會阻止程序退出。
  
  因為計時器事件是在計時器線程中執(zhí)行,所以必須確保正確同步了針對計時器任務(wù)中使用的任何數(shù)據(jù)項的訪問。
  
  在 CalculatePRimes 示例中,并沒有讓主線程休眠,我們可以使用 TimerTask,方法如下:
  
  
   public static void main(String[] args) {
   Timer timer = new Timer();
  
   final CalculatePrimes calculator = new CalculatePrimes();
   calculator.start();
  
   timer.schedule(
   new TimerTask() {
   public void run()
   {
   calculator.finished = true;
   }
   }, TEN_SECONDS);
   }
  
  4、servlet 和 JavaServer Pages 技術(shù)
  
  
  servlet 容器創(chuàng)建多個線程,在這些線程中執(zhí)行 servlet 請求。作為 servlet 編寫者,您不知道(也不應(yīng)該知道)您的請求會在什么線程中執(zhí)行;假如同時有多個對相同 URL 的請求入站,那么同一個 servlet 可能會同時在多個線程中是活動的。
  
  當(dāng)編寫 servlet 或 JavaServer Pages (jsp) 文件時,必須始終假設(shè)可以在多個線程中并發(fā)地執(zhí)行同一個 servlet 或 JSP 文件。必須適當(dāng)同步 servlet 或 JSP 文件訪問的任何共享數(shù)據(jù);這包括 servlet 對象本身的字段。
  
  
  5、實現(xiàn) RMI 對象
  
  
  RMI 工具可以讓您調(diào)用對在其它 JVM 中運行的對象進(jìn)行的操作。當(dāng)調(diào)用遠(yuǎn)程方法時,RMI 編譯器創(chuàng)建的 RMI 存根會打包方法參數(shù),并通過網(wǎng)絡(luò)將它們發(fā)送到遠(yuǎn)程系統(tǒng),然后遠(yuǎn)程系統(tǒng)會將它們解包并調(diào)用遠(yuǎn)程方法。
  
  假設(shè)您創(chuàng)建了一個 RMI 對象,并將它注冊到 RMI 注冊表或者 Java 命名和目錄接口(Java Naming and Directory Interface (JNDI))名稱空間。當(dāng)遠(yuǎn)程客戶機(jī)調(diào)用其中的一個方法時,該方法會在什么線程中執(zhí)行呢?
  
  實現(xiàn) RMI 對象的常用方法是繼續(xù) UnicastRemoteObject。在構(gòu)造 UnicastRemoteObject 時,會初始化用于分派遠(yuǎn)程方法調(diào)用的基礎(chǔ)結(jié)構(gòu)。這包括用于接收遠(yuǎn)程調(diào)用請求的套接字偵聽器,和一個或多個執(zhí)行遠(yuǎn)程請求的線程。
  
  所以,當(dāng)接收到執(zhí)行 RMI 方法的請求時,這些方法將在 RMI 治理的線程中執(zhí)行。
  
  6、小結(jié)
  
  
  線程通過幾種機(jī)制進(jìn)入 Java 程序。除了用 Thread 構(gòu)造器中顯式創(chuàng)建線程之外,還可以用許多其它機(jī)制創(chuàng)建線程:
  
  AWT 和 Swing
  RMI
  java.util.TimerTask 工具
  servlet 和 JSP 技術(shù)

發(fā)表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發(fā)表
主站蜘蛛池模板: 龙口市| 岳阳市| 道孚县| 柳林县| 张掖市| 揭阳市| 湘潭市| 都安| 卓资县| 望城县| 都江堰市| 西乡县| 蒲城县| 长岛县| 龙山县| 伊金霍洛旗| 南昌市| 榆中县| 镇巴县| 亚东县| 盘锦市| 威海市| 沅江市| 峡江县| 雷州市| 娄底市| 疏附县| 宕昌县| 临夏县| 普陀区| 前郭尔| 儋州市| 莱芜市| 桂林市| 呼和浩特市| 武威市| 铜鼓县| 抚松县| 巴南区| 陈巴尔虎旗| 乾安县|