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

首頁(yè) > 學(xué)院 > 開(kāi)發(fā)設(shè)計(jì) > 正文

Java線程的深入探討

2019-11-18 15:37:12
字體:
來(lái)源:轉(zhuǎn)載
供稿:網(wǎng)友

  一般來(lái)說(shuō),我們把正在計(jì)算機(jī)中執(zhí)行的程序叫做"進(jìn)程"(PRocess) ,而不將其
  稱為程序(Program)。所謂"線程"(Thread),是"進(jìn)程"中某個(gè)單一順序的控制流。
  新興的操作系統(tǒng),如Mac,Windows NT,Windows 95等,大多采用多線程的概念,把線
  程視為基本執(zhí)行單位。線程也是java中的相當(dāng)重要的組成部分之一。

  甚至最簡(jiǎn)單的Applet也是由多個(gè)線程來(lái)完成的。在Java中,任何一個(gè)Applet的
  paint()和update()方法都是由AWT(Abstract Window Toolkit)繪圖與事件處理線
  程調(diào)用的,而Applet 主要的里程碑方法——init(),start(),stop()和destory()
  ——是由執(zhí)行該Applet的應(yīng)用調(diào)用的。

  單線程的概念沒(méi)有什么新的地方,真正有趣的是在一個(gè)程序中同時(shí)使用多個(gè)線
  程來(lái)完成不同的任務(wù)。某些地方用輕量進(jìn)程(Lightweig ht Process)來(lái)代替線程
  ,線程與真正進(jìn)程的相似性在于它們都是單一順序控制流。然而線程被認(rèn)為輕量是
  由于它運(yùn)行于整個(gè)程序的上下文內(nèi),能使用整個(gè)程序共有的資源和程序環(huán)境。

  作為單一順序控制流,在運(yùn)行的程序內(nèi)線程必須擁有一些資源作為必要的開(kāi)銷
  。例如,必須有執(zhí)行堆棧和程序計(jì)數(shù)器。在線程內(nèi)執(zhí)行的代碼只在它的上下文中起
  作用,因此某些地方用"執(zhí)行上下文"來(lái)代替"線程"。

  2.線程屬性

  為了正確有效地使用線程,必須理解線程的各個(gè)方面并了解Java 實(shí)時(shí)系統(tǒng)。
  必須知道如何提供線程體、線程的生命周期、實(shí)時(shí)系統(tǒng)如 何調(diào)度線程、線程組、
  什么是幽靈線程(Demo nThread)。

  (1)線程體
  所有的操作都發(fā)生在線程體中,在Java中線程體是從Thread類繼續(xù)的run()方
  法,或?qū)崿F(xiàn)Runnable接口的類中的run()方法。當(dāng)線程產(chǎn)生并初始化后,實(shí)時(shí)系統(tǒng)調(diào)
  用它的run()方法。run()方法內(nèi)的代碼實(shí)現(xiàn)所產(chǎn)生線程的行為,它是線程的主要部
  分。

  (2)線程狀態(tài)
  附圖表示了線程在它的生命周期內(nèi)的任何時(shí)刻所能處的狀態(tài)以及引起狀態(tài)改
  變的方法。這圖并不是完整的有限狀態(tài)圖,但基本概括了線程中比較感愛(ài)好和普遍
  的方面。以下討論有關(guān)線程生命周期以此為據(jù)。


  ●新線程態(tài)(New Thread)
  產(chǎn)生一個(gè)Thread對(duì)象就生成一個(gè)新線程。當(dāng)線程處于"新線程"狀態(tài)時(shí),僅僅是
  一個(gè)空線程對(duì)象,它還沒(méi)有分配到系統(tǒng)資源。因此只能啟動(dòng)或終止它。任何其他操
  作都會(huì)引發(fā)異常。
  ●可運(yùn)行態(tài)(Runnable)
  start()方法產(chǎn)生運(yùn)行線程所必須的資源,調(diào)度線程執(zhí)行,并且調(diào)用線程的run
  ()方法。在這時(shí)線程處于可運(yùn)行態(tài)。該狀態(tài)不稱為運(yùn)行態(tài)是因?yàn)檫@時(shí)的線程并不
  總是一直占用處理機(jī)。非凡是對(duì)于只有一個(gè)處理機(jī)的PC而言,任何時(shí)刻只能有一個(gè)
  處于可運(yùn)行態(tài)的線程占用處理 機(jī)。Java通過(guò)調(diào)度來(lái)實(shí)現(xiàn)多線程對(duì)處理機(jī)的共享。

  ●非運(yùn)行態(tài)(Not Runnable)
  當(dāng)以下事件發(fā)生時(shí),線程進(jìn)入非運(yùn)行態(tài)。
 ?、賡uspend()方法被調(diào)用;
 ?、趕leep()方法被調(diào)用;
  ③線程使用wait()來(lái)等待條件變量;
 ?、芫€程處于I/O等待。
  ●死亡態(tài)(Dead)
  當(dāng)run()方法返回,或別的線程調(diào)用stop()方法,線程進(jìn)入死亡態(tài) 。通常Appl
  et使用它的stop()方法來(lái)終止它產(chǎn)生的所有線程。

  (3)線程優(yōu)先級(jí)
  雖然我們說(shuō)線程是并發(fā)運(yùn)行的。然而事實(shí)經(jīng)常并非如此。正如前面談到的,當(dāng)
  系統(tǒng)中只有一個(gè)CPU時(shí),以某種順序在單CPU情況下執(zhí)行多線程被稱為調(diào)度(schedu
  ling)。Java采用的是一種簡(jiǎn)單、固定的調(diào)度法,即固定優(yōu)先級(jí)調(diào)度。這種算法是
  根據(jù)處于可運(yùn)行態(tài)線程的相對(duì)優(yōu)先級(jí)來(lái)實(shí)行調(diào)度。當(dāng)線程產(chǎn)生時(shí),它繼續(xù)原線程的
  優(yōu)先級(jí)。在需要時(shí)可對(duì)優(yōu)先級(jí)進(jìn)行修改。在任何時(shí)刻,假如有多條線程等待運(yùn)行,
  系統(tǒng)選擇優(yōu)先級(jí)最高的可運(yùn)行線程運(yùn)行。只有當(dāng)它停止、自動(dòng)放棄、或由于某種
  原因成為非運(yùn)行態(tài)低優(yōu)先級(jí)的線程才能運(yùn)行。假如兩個(gè)線程具有相同的優(yōu)先級(jí),它
  們將被交替地運(yùn)行。
  Java實(shí)時(shí)系統(tǒng)的線程調(diào)度算法還是強(qiáng)制性的,在任何時(shí)刻,假如一個(gè)比其他線
  程優(yōu)先級(jí)都高的線程的狀態(tài)變?yōu)榭蛇\(yùn)行態(tài),實(shí)時(shí)系統(tǒng)將選擇該線程來(lái)運(yùn)行。

  (4)幽靈線程
  任何一個(gè)Java線程都能成為幽靈線程。它是作為運(yùn)行于同一個(gè)進(jìn)程內(nèi)的對(duì)象
  和線程的服務(wù)提供者。例如,HotJava瀏覽器有一個(gè)稱為" 后臺(tái)圖片閱讀器"的幽靈
  線程,它為需要圖片的對(duì)象和線程從文件系統(tǒng)或網(wǎng)絡(luò)讀入圖片。

發(fā)表評(píng)論 共有條評(píng)論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
主站蜘蛛池模板: 云梦县| 渝中区| 赣州市| 方山县| 镇原县| 元阳县| 枣庄市| 桂阳县| 巴里| 开封县| 霍林郭勒市| 昌乐县| 汽车| 龙井市| 余江县| 家居| 汕尾市| 长宁县| 黄骅市| 开平市| 木兰县| 来宾市| 若羌县| 汝南县| 久治县| 克什克腾旗| 綦江县| 轮台县| 永宁县| 元谋县| 怀集县| 乐昌市| 灵寿县| 荃湾区| 安塞县| 辉县市| 蒲城县| 城市| 九龙城区| 西城区| 普格县|