Java多線程編程需要我們不斷的進行相關問題的學習下面我們就看看如何才能更好的進行相關知識的學習Java Thread API允許程序員編寫具有多處理機制優點的應用程序在後台處理任務的同時保持用戶所需的交互感
Alex Roetter介紹了Java Thread API並概述Java多線程編程可能引起的問題以及常見問題的解決方案
幾乎所有使用AWT或Swing編寫的畫圖程序都需要多Java多線程編程但多線程程序會造成許多困難剛開始編程的開發者常常會發現他們被一些問題所折磨例如不正確的程序行為或死鎖
在本文中我們將探討使用多線程時遇到的問題並提出那些常見陷阱的解決方案
Java多線程編程是什麼?
一個程序或進程能夠包含多個線程這些線程可以根據程序的代碼執行相應的指令Java多線程編程看上去似乎在並行執行它們各自的工作就像在一台計算機上運行著多個處理機一樣在多處理機計算機上實現多線程時它們確實可以並行工作和進程不同的是線程共享地址空間也就是說多個線程能夠讀寫相同的變量或數據結構
編寫多Java多線程編程程序時你必須注意每個線程是否干擾了其他線程的工作可以將程序看作一個辦公室如果不需要共享辦公室資源或與其他人交流所有職員就會獨立並行地工作某個職員若要和其他人交談當且僅當該職員在聽且他們兩說同樣的語言此外只有在復印機空閒且處於可用狀態(沒有僅完成一半的復印工作沒有紙張阻塞等問題)時職員才能夠使用它在這篇文章中你將看到在 Java 程序中互相協作的線程就好像是在一個組織良好的機構中工作的職員
在Java多線程編程程序中線程可以從准備就緒隊列中得到並在可獲得的系統CPU上運行操作系統可以將線程從處理器移到准備就緒隊列或阻塞隊列中這種情況可以認為是處理器掛起了該線程同樣Java 虛擬機 (JVM) 也可以控制線程的移動——在協作或搶先模型中——從准備就緒隊列中將進程移到處理器中於是該線程就可以開始執行它的程序代碼
協作式線程模型允許線程自己決定什麼時候放棄處理器來等待其他的線程程序開發員可以精確地決定某個線程何時會被其他線程掛起允許它們與對方有效地合作缺點在於某些惡意或是寫得不好的線程會消耗所有可獲得的CPU時間導致其他線程饑餓
在搶占式線程模型中操作系統可以在任何時候打斷線程通常會在它運行了一段時間(就是所謂的一個時間片)後才打斷它這樣的結果自然是沒有線程能夠不公平地長時間霸占處理器然而隨時可能打斷線程就會給程序開發員帶來其他麻煩同樣使用辦公室的例子假設某個職員搶在另一人前使用復印機但打印工作在未完成的時候離開了另一人接著使用復印機時該復印機上可能就還有先前那名職員留下來的資料搶占式Java多線程編程模型要求線程正確共享資源協作式模型卻要求線程共享執行時間由於 JVM 規范並沒有特別規定線程模型Java 開發員必須編寫可在兩種模型上正確運行的程序在了解線程以及線程間通訊的一些方面之後我們可以看到如何為這兩種模型設計程序
線程和Java語言
為了使用Java語言創建線程你可以生成一個Thread類(或其子類)的對象並給這個對象發送start() 消息(程序可以向任何一個派生自Runnable接口的類對象發送start()消息)每個線程動作的定義包含在該Java多線程編程對象的run()方法中run方法就相當於傳統程序中的main()方法線程會持續運行直到run()返回為止此時該線程便死了
From:http://tw.wingwit.com/Article/program/Java/gj/201311/27361.html