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

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

[學習筆記]Thinking in Java (the 2nd edition) Study Note (4)

2019-11-18 15:04:07
字體:
供稿:網(wǎng)友

第13章 創(chuàng)建窗口和程序片



第14章 多線程

多線程的實現(xiàn)基本可以有2種方法:從Thread類繼續(xù) 和 實現(xiàn)Runnable 接口

1.從線程繼續(xù)為創(chuàng)建一個線程,最簡單的方法就是從Thread類繼續(xù)。這個類包含了創(chuàng)建和運行線程所需的一切東西。Thread最重要的方法是run()。但為了使用run(),必須對其進行過載或者覆蓋,使其能充分按自己的吩咐行事。因此,run()屬于那些會與程序中的其他線程“并發(fā)”或“同時”執(zhí)行的代碼。雖然重載的是run() ,但在運行線程的時候,需要調(diào)用的是start() 方法;見下面的例子:

public class SimpleThread extends Thread {    PRivate int countDown = 10000;    private int threadNumber;    private static int threadCount = 0;    public SimpleThread() {        threadNumber = ++threadCount;        System.out.println("Making " + threadNumber);    }    public void run() {        while(true) {            System.out.println("Thread " + threadNumber + "(" + countDown + ")");            if(--countDown == 0) return;        }    }        public static void main(String[] args) {        for(int i = 0; i < 5; i++)            new SimpleThread().start();                System.out.println("All Threads Started");    }}

run()方法幾乎肯定含有某種形式的循環(huán)——它們會一直持續(xù)到線程不再需要為止。因此,我們必須規(guī)定特定的條件,以便中斷并退出這個循環(huán)(或者在上述的例子中,簡單地從run()返回即可)。run()通常采用一種無限循環(huán)的形式。也就是說,通過阻止外部發(fā)出對線程的stop()或者destroy()調(diào)用,它會永遠運行下去(直到程序完成)。

【共享有限的資源】可將單線程程序想象成一種孤立的實體,它能遍歷我們的問題空間,而且一次只能做一件事情。由于只有一個實體,所以永遠不必擔心會有兩個實體同時試圖使用相同的資源,就象兩個人同時都想停到一個車位,同時都想通過一扇門,甚至同時發(fā)話。進入多線程環(huán)境后,它們則再也不是孤立的。可能會有兩個甚至更多的線程試圖同時同一個有限的資源。必須對這種潛在資源沖突進行預(yù)防,否則就可能發(fā)生兩個線程同時訪問一個銀行帳號,打印到同一臺計算機,以及對同一個值進行調(diào)整等等。

【一個線程可以有四種狀態(tài)】(1)新(New):線程對象已經(jīng)創(chuàng)建,但尚未啟動,所以不可運行。(2)可運行(Runnable):意味著一旦時間分片機制有空閑的CPU周期提供給一個線程,那個線程便可立即開始運行。因此,線程可能在、也可能不在運行當中,但一旦條件許可,沒有什么能阻止它的運行——它既沒有“死”掉,也未被“堵塞”。(3)死(Dead):從自己的run()方法中返回后,一個線程便已“死”掉。亦可調(diào)用stop()令其死掉,但會產(chǎn)生一個違例——屬于Error的一個子類(也就是說,我們通常不捕捉它)。記住一個違例的“擲”出應(yīng)當是一個非凡事件,而不是正常程序運行的一部分。所以不建議你使用stop()(在java1.2則是果斷反對)。另外還有一個destroy()方法(它永遠不會實現(xiàn)),應(yīng)該盡可能地避免調(diào)用它,因為它非常武斷,根本不會解除對象的鎖定。(4)堵塞(Blocked):線程可以運行,但有某種東西阻礙了它。若線程處于堵塞狀態(tài),調(diào)度機制可以簡單地跳過它,不給它分配任何CPU時間。除非線程再次進入“可運行”狀態(tài),否則不會采取任何操作。

【為何會堵塞】堵塞狀態(tài)是前述四種狀態(tài)中最有趣的,值得我們作進一步的探討。線程被堵塞可能是由下述五方面的原因造成的:(1) 調(diào)用sleep(毫秒數(shù)),使線程進入“睡眠”狀態(tài)。在規(guī)定的時間內(nèi),這個線程是不會運行的。(2) 用suspend()暫停了線程的執(zhí)行。除非線程收到resume()消息,否則不會返回“可運行”狀態(tài)。(3)用wait()暫停了線程的執(zhí)行。除非線程收到nofify()或者notifyAll()消息,否則不會變成“可運行”(是的,這看起來同原因2非常相象,但有一個明顯的區(qū)別是我們馬上要揭示的)。(4) 線程正在等候一些IO(輸入輸出)操作完成。(5) 線程試圖調(diào)用另一個對象的“同步”方法,但那個對象處于鎖定狀態(tài),暫時無法使用。

2.實現(xiàn)Runnable 接口

第15章 網(wǎng)絡(luò)編程1. 機器標識ip以兩種形式存在著:(1)大家最熟悉的DNS(域名服務(wù))形式(2)由點號(.)分隔的四組數(shù)字,比如202.98.32.1112.網(wǎng)絡(luò)最基本的精神就是讓兩臺機器連接到一起,并相互“交談”或者“溝通”。3.端口我們設(shè)置一個客戶機或者服務(wù)器的時候,必須選擇一個無論客戶機還是服務(wù)器都認可連接的端口。就象我們?nèi)グ輹橙藭r,IP地址是他居住的房子,而端口是他在的那個房間。4.套接字“套接字”或者“插座”(Socket)也是一種軟件形式的抽象,用于表達兩臺機器間一個連接的“終端”。針對一個特定的連接,每臺機器上都有一個“套接字”,可以想象它們之間有一條虛擬的“線纜”。線纜的每一端都插入一個“套接字”或者“插座”里。當然,機器之間的物理性硬件以及電纜連接都是完全未知的。<b>抽象的基本宗旨是讓我們盡可能不必知道那些細節(jié)</b>。

第16章 設(shè)計模式范式分類《Design Patterns》 一書討論了23種不同的范式,并依據(jù)三個標準分類(所有標準都涉及那些可能發(fā)生變化的方面)。這三個標準是:(1) 創(chuàng)建:對象的創(chuàng)建方式。這通常涉及對象創(chuàng)建細節(jié)的隔離,這樣便不必依靠具體類型的對象,所以在新添一種對象類型時也不必改動代碼。(2) 結(jié)構(gòu):設(shè)計對象,滿足特定的項目限制。這涉及對象與其他對象的連接方式,以保證系統(tǒng)內(nèi)的改變不會影響到這些連接。(3) 行為:對程序中特定類型的行動進行操縱的對象。這要求我們將希望采取的操作封裝起來,比如解釋一種語言、實現(xiàn)一個請求、在一個序列中遍歷(就象在繼續(xù)器中那樣)或者實現(xiàn)一種算法。本章提供了“觀察器”(Observer)和“訪問器”(Visitor)的范式的例子。

第17章  項目//略2005-4-5

--------------------------------------------------------------

總算可以告一段落了,前前后后花了3個多月才看完,有些許收獲,但更重要的是缺乏實踐的機會;下一步呢?下一步該干什么?

發(fā)表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發(fā)表
主站蜘蛛池模板: 依兰县| 德化县| 南宁市| 西藏| 福泉市| 南漳县| 三明市| 岳普湖县| 乌海市| 东台市| 炎陵县| 沧州市| 株洲市| 滕州市| 五家渠市| 潮州市| 泽库县| 桦甸市| 江都市| 和田县| 沈丘县| 连云港市| 丘北县| 黄冈市| 盈江县| 上林县| 岗巴县| 浙江省| 太湖县| 商河县| 获嘉县| 浦县| 昂仁县| 丹巴县| 资兴市| 林甸县| 墨脱县| 昔阳县| 全椒县| 凤台县| 缙云县|