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

對Java多線程的一些總結

2013-11-23 19:41:46  來源: Java高級技術 

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

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