資源描述:
《淺論1204012027》由會員上傳分享,免費在線閱讀,更多相關內容在工程資料-天天文庫。
1、淺論1204012027淺論1204012027_俞喆軍_java課程論文導讀:Lock的鎖定是通過代碼實現(xiàn)的,而synchronized是在JVM層面上實現(xiàn)的。要監(jiān)控工具能監(jiān)測到Lock的鎖定那還需要有一段時日。另外,synchronized在鎖定時如果方法塊拋出異常,JVM會自動將鎖釋放掉,不會因為出了異常沒有釋放鎖造成線程死鎖。但是Lock的話就享受不到JVM帶來自動的功能,出現(xiàn)異常時必須在finally將鎖釋放掉,否則學號:1204012027班級:12計本2班俞喆軍JAVA課程論文多線程和異常處理大三上學期學習了《java語言程序
2、設計》這門課程。Java語言是當前計算機應用較為廣泛的面向對象程序設計語言之一,本次課程注重對我們動手能力的培養(yǎng)與提高。我在邊學習邊上機的過程中,深入細致的掌握這門課程。通過上機調試程序,發(fā)現(xiàn)了概念上的模糊和方法的錯誤,最終深刻理解和掌握這門Java語言課程。這里,關于java中的多線程和異常處理兩方面的內容作出自己的一些理解和學習心得。在Java語言中,線程的創(chuàng)建有兩種方式:(1)定義一個Thread類的子類,并在該子類中重寫run()方法,該run()方法是線程執(zhí)行的起點;(2)定義一個實現(xiàn)Runnable接口的類,并在該類中定義Run
3、nable接口的run()方法,同樣,該run()方法代表了線程執(zhí)行的起點。Thread類封裝了線程的行為,它是一個具體的類。要創(chuàng)建線程,必須定義一個Thread類的子類,在該子類中重寫Thread類的run()方法,即定義線程所需完成的工作。線程的啟動則是通過引用該Thread子類的start()方法來實現(xiàn),而實際上start()方法被引用后,其實引用該Thread子類的run()方法來啟動線程的。也就是說,其實線程類只有一種,那就是Thread。線程有線程自己的特性,多線程提高了CPU利用率的同時,也帶來了一些問題。因此,在學習多線程,
4、其實就是學習多線程編程多帶來哪些問題,以及如何去解決這些問題,使得多線程能夠按照我們的意愿來執(zhí)行。首先,線程也有自己的狀態(tài),除了新建和死亡狀態(tài),就有等待/阻塞、準備、和運行狀態(tài)。同樣的,這些狀態(tài)可以轉換。線程個狀態(tài)的轉換是:準備可以進入運行,運行也可以進入準備;運行還可以進入等待/阻塞;但是等待/阻塞不能進入運行,等待/阻塞可以進入準備狀態(tài)。一個線程對象從創(chuàng)建、啟動、運行、終止,直到線程對象被Java虛擬機所釋放,其生命周期會處于各種不同的狀態(tài)。當創(chuàng)建了線程對象,并引用其start()方法之后,該線程就進入自身的生命周期。線程的生命周期通常
5、包含有四種狀態(tài),即“運行”、“暫停”、“同步”和“掛起”,這四個狀態(tài)的遷移主要是通過Thread類所提供的方法來實現(xiàn)?!斑\行”和“暫停”間的狀態(tài)轉換是通過sleep()和join()方法來實現(xiàn),而“運行”和“同步”之間轉換則借助于每個對象自身的e()方法完成與“運行”狀態(tài)的轉換。這幾種狀態(tài),加上控制線程的函數(shù),就可以控制線程了,這就叫作線程的調度。新建:就是利用Thread的構造函數(shù)定義一個線程。準備:當執(zhí)行了Thread中的strat方法,及使得線程進入準備狀態(tài),隨時可以進入運行狀態(tài)。運行:當操作系統(tǒng)的調度器把CPU分給了這個線程,這個線
6、程就進入了運行狀態(tài),也就是執(zhí)行我們在線程中定義的run方法里面的內容。等待/阻塞:當一個線程的繼續(xù)執(zhí)行需要一個條件,但是該條件還不成熟,需要調度器來通知。而等待調度器發(fā)出通知的這段時間內,線程就進入了等待狀態(tài)。當一個線程訪問一個資源的時候,這個資源正被另外的線程訪問,而這個資源是加了鎖的,只允許一個線程訪問。這時候,線程就進入了阻塞狀態(tài)。死亡:當線程的run方法運行完之后,線程死亡,這是正常死亡;當線程方發(fā)生異常而沒有捕獲時,也會死亡,這是非正常死亡。線程的同步:線程同步一般有三種方法:synchronized塊、synchronized方
7、法和加lock鎖。Synchronized方法只需在方法簽名中加入該關鍵字即可,lock鎖只要啊相應方法中調用lock對象的lock方法即可。二者的區(qū)別:synchronized也有好處的,比如一些性能監(jiān)控工具,可以監(jiān)測到synchronized的鎖。無法監(jiān)測到Lock的鎖定,畢竟Lock的鎖定是通過代碼實現(xiàn)的,而synchronized是在JVM層面上實現(xiàn)的。要監(jiān)控工具能監(jiān)測到Lock的鎖定那還需要有一段時日。另外,synchronized在鎖定時如果方法塊拋出異常,JVM會自動將鎖釋放掉,不會因為出了異常沒有釋放鎖造成線程死鎖。但是Lo
8、ck的話就享受不到JVM帶來自動的功能,出現(xiàn)異常時必須在finally將鎖釋放掉,否則將會引起死鎖。在實際的多線程編程中,會碰到多個線程對同一資源進行訪問的情況。比如多個線程對同