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

首頁 > 學院 > 開發(fā)設計 > 正文

在Java程序中采用線程獲取優(yōu)異性能

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

  什么是線程?
  線程的概念并不難于把握:它是程序代碼的一個獨立的執(zhí)行通道。當多個線程執(zhí)行時,經(jīng)由相同代碼的一個線程的通道通常與其它的不同。例如,假設一個線程執(zhí)行一段相當于一個if-else語句的if部分的字節(jié)代碼時,而另一個線程正執(zhí)行相當于else部分的字節(jié)代碼。JVM怎樣保持對于每一個線程執(zhí)行的跟蹤呢?JVM給每一個線程它自己的方法調(diào)用堆棧。另外跟蹤當前指令字節(jié)代碼,方法堆棧跟蹤本地變量,JVM傳遞給一個方法的參數(shù),以及方法的返回值。 
  當多個線程在同一個程序中執(zhí)行字節(jié)代碼序列時,這種行為叫作多線程。多線程在多方面有利于程序: 
  ·當執(zhí)行其它任務時多線程GUI(圖形用戶界面)程序仍能保持對用戶的響應,比如重編頁碼或打印一個文檔。 
  ·帶線程的程序一般比它們沒有帶線程的副本程序完成得快。這尤其表現(xiàn)在線程運行在一個多處理器機器上,在這里每一個線程都有它自己的處理器。
  java通過java.lang.Thread類完成多線程。每一個線程對象描述一個單獨的執(zhí)行線程。那些運行發(fā)生在線程的run()方法中。因為缺省的run()方法什么都不做,你必須創(chuàng)建Thread子類并重載run()以完成有用的工作。練習列表1中領略一個在Thread中的線程及多線程: 
  列表1. ThreadDemo.java 
  // ThreadDemo.java
  class ThreadDemo
  {
  public static void main (String [] args)
  {
  MyThread mt = new MyThread ();
  mt.start ();
  for (int i = 0; i < 50; i++)
  System.out.PRintln ("i = " + i + ", i * i = " + i * i);
  }
  }
  class MyThread extends Thread
  {
  public void run ()
  {
  for (int count = 1, row = 1; row < 20; row++, count++)
  {
  for (int i = 0; i < count; i++)
  System.out.print ('*');
  System.out.print ('/n');
  }
  }
  }
  列表1顯示了一個由類ThreadDemo和MyThread組成的應用程序的源代碼。類ThreadDemo通過創(chuàng)建一個MyThread對象驅(qū)動應用程序,開始一個與其對象相關的線程并執(zhí)行一段打印一個正方形表的代碼。相反, MyThread重載Thread的run()方法打印(通過標準輸入流)一個由星形符號組成的直角三角形。 
  當你鍵入java ThreadDemo運行應用程序時, JVM創(chuàng)建一個運行main()方法的開始線程。通過執(zhí)行mt.start (),開始線程告訴JVM創(chuàng)建一個執(zhí)行包含MyThread對象的run()方法的字節(jié)代碼指令的第二個線程。當start()方法返回時,開始線程循環(huán)執(zhí)行打印一個正方形表,此時另一個新線程執(zhí)行run()方法打印直角三角形。 
  輸出會象什么樣呢?運行ThreadDemo就可以看到。你將注重到每一個線程的輸出與其它線程的輸出相互交替。這樣的結果是因為兩個線程將它們的輸出都發(fā)送到了同樣的標準輸出流。 
  注重
  多數(shù)(不是所有)JVM設備使用下層平臺的線程性能。因為那些性能是平臺特有的,你的多線程程序的輸出順序可能與一些人的其他輸出的順序不一樣。這種不同是由于時序的安排,我將在這一系列的稍后探討這一話題。
  線程類
  要精通寫多線程代碼,你必須首先理解創(chuàng)建Thread類的多種方法。這部份將探討這些方法。明確地說,你將學到開始線程的方法,命名線程,使線程休眠,決定一個線程是否激活,將一個線程與另一個線程相聯(lián),和在當前線程的線程組及子組中列舉所有激活的線程。我也會討論線程調(diào)試輔助程序及用戶線程與監(jiān)督線程的對比。 
  我將在以后的文章中介紹線程方法的余下部份,Sun不贊成的方法除外。 
  警告
  Sun有一些不贊成的線程方法種類,比如suspend()和resume(),因為它們能鎖住你的程序或破壞對象。所以,你不必在你的代碼中調(diào)用它們。考慮到針對這些方法工作區(qū)的SDK文件,在這篇文章中我沒有包含這些方法。 
  構造線程
  Thread有八個構造器。最簡單的是:
  ·Thread(),用缺省名稱創(chuàng)建一個Thread對象 
  ·Thread(String name),用指定的name參數(shù)的名稱創(chuàng)建一個Thread對象
  下一個最簡單的構造器是Thread(Runnable target)和Thread(Runnable target, String name)。 除Runnable參數(shù)之外,這些構造器與前述的構造器一樣。不同的是:Runnable參數(shù)識別提供run()方法的線程之外的對象。(你將在這篇文章稍后學到Runnable。)最后幾個構造器是Thread(String name),Thread(Runnable target),和Thread(Runnable target, String name)。然而,最后的構造器包含了一個為了組織意圖的ThreadGroup參數(shù)。 
  最后四個構造器之一,Thread(ThreadGroup group, Runnable target, String name, long stackSize),令人感愛好的是它能夠讓你指定想要的線程方法調(diào)用堆棧的大小。能夠指定大小將證實在使用遞歸方法(一種為何一個方法不斷重復調(diào)用自身的技術)美麗地解決一些問題的程序中是十分有幫助的。通過明確地設置堆棧大小,你有時能夠預防StackOverflowErrors。然而,太大將導致OutOfMemoryErrors。同樣,Sun將方法調(diào)用堆棧的大小看作平臺依靠。

發(fā)表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發(fā)表
主站蜘蛛池模板: 台中市| 澳门| 金山区| 赫章县| 治多县| 缙云县| 永嘉县| 北安市| 鹿邑县| 华亭县| 冀州市| 泸溪县| 弥勒县| 青州市| 甘孜县| 芜湖县| 西贡区| 马关县| 金堂县| 抚顺市| 台北县| 瓦房店市| 玉龙| 辽宁省| 玛沁县| 巢湖市| 攀枝花市| 南溪县| 安宁市| 拉孜县| 青河县| 于都县| 克东县| 江山市| 桦甸市| 兴义市| 祥云县| 运城市| 漳平市| 綦江县| 龙里县|