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

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

對Java多線程的一些總結(jié)

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

  總結(jié)
  何時使用多線程技術(shù),以及何時避免用它,這是我們需要把握的重要課題。它的主要目的是對大量任務進行有序的治理。通過多個任務的混合使用,可以更有效地利用計算機資源,或者對用戶來說顯得更方便。資源均衡的經(jīng)典問題是在IO等候期間如何利用CPU。至于用戶方面的方便性,最經(jīng)典的問題就是如何在一個長時間的下載過程中監(jiān)視并靈敏地反應一個“停止”(stop)按鈕的按下。
  多線程的主要缺點包括:
  (1) 等候使用共享資源時造成程序的運行速度變慢。
  (2) 對線程進行治理要求的額外CPU開銷。
  (3) 復雜程度無意義的加大,比如用獨立的線程來更新數(shù)組內(nèi)每個元素的愚蠢主意。
  (4) 漫長的等待、浪費精力的資源競爭以及死鎖等多線程癥狀。
  線程另一個優(yōu)點是它們用“輕度”執(zhí)行切換(100條指令的順序)取代了“重度”進程場景切換(1000條指令)。由于一個進程內(nèi)的所有線程共享相同的內(nèi)存空間,所以“輕度”場景切換只改變程序的執(zhí)行和本地變量。而在“重度”場景切換時,一個進程的改變要求必須完整地交換內(nèi)存空間。
  線程處理看來好象進入了一個全新的領(lǐng)域,似乎要求我們學習一種全新的程序設(shè)計語言——或者至少學習一系列新的語言概念。由于大多數(shù)微機操作系統(tǒng)都提供了對線程的支持,所以程序設(shè)計語言或者庫里也出現(xiàn)了對線程的擴展。不管在什么情況下,涉及線程的程序設(shè)計:
  (1) 剛開始會讓人摸不著頭腦,要求改換我們傳統(tǒng)的編程思路;
  (2) 其他語言對線程的支持看來是類似的。所以一旦把握了線程的概念,在其他環(huán)境也不會有太大的困難。盡管對線程的支持使java語言的復雜程度多少有些增加,但請不要責怪Java。究竟,利用線程可以做許多有益的事情。
  多個線程可能共享同一個資源(比如一個對象里的內(nèi)存),這是運用線程時面臨的最大的一個麻煩。必須保證多個線程不會同時試圖讀取和修改那個資源。這要求技巧性地運用synchronized(同步)要害字。它是一個有用的工具,但必須真正把握它,因為假若操作不當,極易出現(xiàn)死鎖。
  除此以外,運用線程時還要注重一個非常非凡的問題。由于根據(jù)Java的設(shè)計,它答應我們根據(jù)需要創(chuàng)建任意數(shù)量的線程——至少理論上如此(例如,假設(shè)為一項工程方面的有限元素分析創(chuàng)建數(shù)以百萬的線程,這對Java來說并非實際)。然而,我們一般都要控制自己創(chuàng)建的線程數(shù)量的上限。因為在某些情況下,大量線程會將場面變得一團糟,所以工作都會幾乎陷于停頓。臨界點并不象對象那樣可以達到幾千個,而是在100以下。一般情況下,我們只創(chuàng)建少數(shù)幾個要害線程,用它們解決某個特定的問題。這時數(shù)量的限制問題不大。但在較常規(guī)的一些設(shè)計中,這一限制確實會使我們感到束手束腳。
  大家要注重線程處理中一個不是十分直觀的問題。由于采用了線程“調(diào)度”機制,所以通過在run()的主循環(huán)中插入對sleep()的調(diào)用,一般都可以使自己的程序運行得更快一些。這使它對編程技巧的要求非常高,非凡是在更長的延遲似乎反而能提高性能的時候。當然,之所以會出現(xiàn)這種情況,是由于在正在運行的線程預備進入“休眠”狀態(tài)之前,較短的延遲可能造成“sleep()結(jié)束”調(diào)度機制的中斷。這便強迫調(diào)度機制將其中止,并于稍后重新啟動,以便它能做完自己的事情,再進入休眠狀態(tài)。必須多想一想,才能意識到事情真正的麻煩程度。
  本章遺漏的一件事情是一個動畫例子,這是目前程序片最流行的一種應用。然而,Java JDK配套提供了解決這個問題的一整套方案(并可播放聲音),大家可到j(luò)ava.sun.com的演示區(qū)域下載。此外,我們完全有理由相信未來版本的Java會提供更好的動畫支持——盡管目前的Web涌現(xiàn)出了與傳統(tǒng)方式完全不同的非Java、非程序化的許多動畫方案。假如想系統(tǒng)學習Java動畫的工作原理,可參考《Core Java——核心Java》一書,由Cornell&Horstmann編著,PRentice-Hall于1997年出版。若欲更深入地了解線程處理,請參考《Concurrent Programming in Java——Java中的并發(fā)編程》,由Doug Lea編著,Addison-Wiseley于1997年出版;或者《Java Threads——Java線程》,Oaks&Wong編著,O'Reilly于1997年出版。

發(fā)表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發(fā)表
主站蜘蛛池模板: 井陉县| 崇义县| 枝江市| 清徐县| 高碑店市| 昌乐县| 丰宁| 肇州县| 通江县| 绿春县| 顺义区| 威信县| 临海市| 黑龙江省| 渑池县| 土默特左旗| 巴林左旗| 宁海县| 科尔| 泗水县| 清徐县| 来宾市| 苏尼特右旗| 阜新市| 德惠市| 江山市| 资溪县| 通许县| 霞浦县| 潜江市| 佛冈县| 双牌县| 平远县| 休宁县| 庄浪县| 德化县| 清丰县| 会泽县| 北宁市| 浮山县| 霍林郭勒市|