線程:
? ? ? ? ? ? 概述:線程是操作系統(tǒng)運(yùn)算調(diào)度的最小單位.它被包含在進(jìn)程中,是進(jìn)程中實(shí)際運(yùn)行的單位.
線程安全:
? ? ? ? ? ? 多線程,同時(shí)執(zhí)行,執(zhí)行同一個(gè)任務(wù),操作同一個(gè)共享數(shù)據(jù),就可能存在線程安全的問題.單線程不存在線程安全問題.
線程同步:
? ? ? ? ? ?概述:某一段代碼要么一次性執(zhí)行完畢,要么不去執(zhí)行.?
? ? ? ? ? ? 三種線程同步的方式:
? ? ? ? ? ? ? ? ? ? ? ? 1.? ?格式:synchorized(鎖對(duì)象){
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? //需要同步的代碼
????????????????????????????}
? ? ? ? ? ? ? ? ? ? ? ? ? 注意:鎖對(duì)象可以使任意對(duì)象,但必須是同一對(duì)象.
? ? ? ? ? ? ? ? ? ? ? ? ?2.格式public synchorized void method(){
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?//需要同步的代碼?
? ? ? ? ? ? ? ? ? ? ? ? ? ? }
? ? ? ? ? ? ? ? ? ? ? ? ? ? 注意:同步方法也需要鎖對(duì)象,鎖對(duì)象默認(rèn)是this,但是如果同步方法是靜態(tài)方法,那么默認(rèn)的鎖對(duì)象是類名.class.
? ? ? ? ? ? ? ? ? ? ? ? ? 3.格式: Lock lock = new ReentrantLock( )
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? lock.lock( ) ;? // 加鎖
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? 需要同步的代碼
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? lock.unlock( ) ;? // 釋放鎖
線程的狀態(tài):
? ? ? ? ? ? ? ? 1.new(新建): 線程剛被創(chuàng)建,但未啟動(dòng),還沒調(diào)用start方法.
? ? ? ? ? ? ? ? 2.Rannable(可運(yùn)行):線程可以再java虛擬機(jī)中運(yùn)行的狀態(tài),可能正在運(yùn)行自己的代碼,也可能沒有運(yùn)行,這取決于操作系統(tǒng)處理器.
? ? ? ? ? ? ? ? 3.Blocked(鎖阻塞): 當(dāng)線程試圖獲取一個(gè)鎖對(duì)象,而鎖對(duì)象被其他的線程持有,則該線程進(jìn)入Blocked狀態(tài),當(dāng)該線程持有鎖是,該線程將變成Runnable狀態(tài).
? ? ? ? ? ? ? ? ?4.Waiting(無限等待): 一個(gè)線程在等待另一個(gè)線程執(zhí)行一個(gè)(喚醒)動(dòng)作是,改線成進(jìn)入Waiting狀態(tài),進(jìn)入這個(gè)狀態(tài)后是不能自動(dòng)喚醒的,必須等待另一個(gè)線程調(diào)用notify或者notifyall方法才能喚醒.
? ? ? ? ? ? ? ? 5.tined waiting(計(jì)時(shí)等待) 同waiting狀態(tài),有幾個(gè)方法超時(shí)參數(shù),調(diào)用他們將進(jìn)入timed waiting狀態(tài).這一狀態(tài)將一直保持到超時(shí)期滿或者接收到喚醒通知.帶有超時(shí)參數(shù)的常用方法發(fā)有 thread.sleep Object.wait.
? ? ? ? ? ? ? ?6.teminated(被終止):因?yàn)閞un方法正常退出而死亡,或者因?yàn)闆]有捕獲的異常終止了run方法而死亡.