Java執行緒總結(二)

2021-09-10 02:54:08 字數 3747 閱讀 6450

實現:

sychronized()

工作原理:

1)任意的物件都可以作為乙個鎖物件,每一物件都有乙個內建鎖

2) 某一時刻,鎖物件最多只能被乙個執行緒持有

3)執行緒獲得了鎖之後會一直持有,知道執行完同步**塊後才能釋放。

4) 執行緒要執行同步**塊,必須先獲得鎖物件

執行緒不安全舉例:

/**

* 執行緒安全問題

* 以下的做法會出現執行緒不安全的問題

* @author kiosk

*/public

class

ticket

extends

thread

trycatch

(interruptedexception e)

system.out.

println

(getname()

+"視窗賣出了第"

+ num--

+"號票");

}}}

解決的方法:讓他們有乙個共同的類的位元組碼的鎖物件

public

class

ticket

extends

thread

trycatch

(interruptedexception e)

system.out.

println

(getname()

+"視窗賣出了第"

+ num--

+"號票");

}}}}

sleep方法(會丟擲異常),讓執行緒休眠一會兒

/**

* @author kiosk

*/public

class

demo2

catch

(interruptedexception e)

system.out.

println

(thread.

currentthread()

.getname()

+ i);}

}}.start()

;new

thread()

catch

(interruptedexception e)}}

}.start()

;}}

(1)sleep方法

根據原始碼發現,sleep是乙個本地方法,

原始碼:

守護執行緒:該執行緒不會單獨執行,當其他的非守護執行緒執行完畢之後,守護執行緒會自動退出。具有最低級別的優先順序,主要是為其他的優先順序高的執行緒進行服務。

方法:void setdaemon(boolean on) 當引數為true的時候,執行緒為守護執行緒

public

final

void

setdaemon

(boolean on)

// on為true時候,就將這個執行緒標誌為守護執行緒

daemon = on;

}

舉例:

public

class

deamon}}

; thread t2 =

newthread

("這是乙個守護執行緒")}

};//將執行緒設定為守護執行緒,當非守護執行緒執行完畢的時候,守護執行緒就會退出

t2.setdaemon

(false);

t1.start()

; t2.

start()

;}}

相當於是插隊 join() 方法,會丟擲異常(interruptedexception)

舉例:兩個執行緒中,在乙個執行緒執行的過程中另乙個執行緒加入,先讓加入的執行緒執行完畢,相當於是搶占資源。

源**:

//用來加入當前執行緒(規定的時間)

public

final

synchronized

void

join

(long millis)

throws interruptedexception

//如果引數為零的話,一直等待

if(millis ==0)

}else

//進入wait狀態

wait

(delay)

;//now為從記錄base開始之後過去的時間

now = system.

currenttimemillis()

- base;}}

}

舉例:

public

class

testjoin

catch

(interruptedexception e)

system.out.

println

(thread.

currentthread()

.getname()

+"1111");

}}};

thread t2 =

newthread

("執行緒2"

)catch

(interruptedexception e)

if(i ==2)

catch

(interruptedexception e)

} system.out.

println

(thread.

currentthread()

.getname()

+"2222");

}}};

t1.start()

; t2.

start()

;}}

禮讓執行緒(很少使用)讓出cpu

public

class

testyied}}

.start()

;new

thread

("禮讓執行緒"

) system.out.

println

(thread.

currentthread()

.getname()

+"--"

+ i );}

}}.start()

;}}

public final void setpriority(int newpriority)

public

class

testpriority}}

; thread t2 =

newthread()

}};//設定最大優先順序 能讓當前執行緒優先執行

t1.setpriority(10

);//設定最小優先順序

t2.setpriority(1

);t1.

start()

; t2.

start()

;}}

vector:執行緒安全 arraylist :執行緒不安全的

hashmap :執行緒安全 hashtable :執行緒安全

stringbuffer:執行緒安全 stringbuilder:執行緒不安全

collections:集合工具類能將執行緒不安全的集合轉換為執行緒安全的集合

JAVA執行緒總結( 二)

繼續上篇的總結,這次我們講執行緒同步機制 執行緒同步是為了確保執行緒安全,所謂執行緒安全指的是多個執行緒對同一資源進行訪問時,有可能產生資料不一致問題,導致執行緒訪問的資源並不是安全的。如果多執行緒程式執行結果和單執行緒執行的結果是一樣的,且相關變數的值與預期值一樣,則是執行緒安全的。舉個簡單的例子...

Java執行緒總結

在實際應用中,我們經常用到多執行緒,如車站的售票系統,車站的各個售票口相當於各個執行緒。當我們做這個系統的時候可能會想到兩種方式來實現,繼承thread類或實現runnable介面,現在看一下這兩種方式實現的兩種結果。繼承thread方式class threadtest extends thread...

Java執行緒(二)

昨天我們認識了什麼是執行緒和實現他的兩種方式,今天我們再進一步了解。執行緒的狀態轉換是執行緒控制的基礎。執行緒狀態總的可分為五大狀態 分別是生 死 可執行 執行 等待 阻塞。如下圖 上圖能夠清晰的看出執行緒見得狀態是如何轉換的,並且標註了在不同的狀態執行緒對cpu的資源使用情況。其中對執行緒操作的方...