問題:以下四個程式doother方法的執行需不需要等待dosome方法的結束?
程式1:
public
class
exam01
catch
(interruptedexception e)
t2.start()
;}}class
mythread
extends
thread
@override
public
void
run()if
(thread.
currentthread()
.getname()
.equals
("t2"))
}}class
myclass
catch
(interruptedexception e)
system.out.
println
("dosome over");
}public
synchronized
static
void
doother()
}
關於程式1,是需要的,因為synchronized是寫在靜態方法裡面的,所以此時synchronized是類鎖,不管建立幾個物件,乙個類只能有乙個鎖,所以需要等待
程式2:
public
class
exam01
catch
(interruptedexception e)
t2.start()
;}}class
mythread
extends
thread
@override
public
void
run()if
(thread.
currentthread()
.getname()
.equals
("t2"))
}}class
myclass
catch
(interruptedexception e)
system.out.
println
("dosome over");
}public
synchronized
void
doother()
}
關於程式2,不需要等待,因為myclass有兩個物件,兩個物件有兩把鎖,乙個鎖對應乙個synchronized,所以t1和t2各自執行各自的,不受睡眠影響
程式3:
public
class
exam01
catch
(interruptedexception e)
t2.start()
;}}class
mythread
extends
thread
@override
public
void
run()if
(thread.
currentthread()
.getname()
.equals
("t2"))
}}class
myclass
catch
(interruptedexception e)
system.out.
println
("dosome over");
}public
synchronized
void
doother()
}
關於程式3,需要,因為,myclass物件只有乙個,且doother和dosome都有synchronized,所以只有當dosome執行完,doother才能執行
程式4:
public
class
exam01
catch
(interruptedexception e)
t2.start()
;}}class
mythread
extends
thread
@override
public
void
run()if
(thread.
currentthread()
.getname()
.equals
("t2"))
}}class
myclass
catch
(interruptedexception e)
system.out.
println
("dosome over");
}public
void
doother()
}
關於程式4 不需要等待,因為doother沒有synchronized。 多執行緒練習
1 請在指定位置插入 實現列印輸出1 99。package com.company.deno class demo public void method 結束位置 thread t new thread a t.start 2 檢查 並修改 class test implements runnabl...
多執行緒練習2
多執行緒練習 兩個執行緒一起列印數從1到9,執行緒1列印所有不是3的倍數的數,執行緒2列印3的倍數。1.用互斥鎖 條件變數的方法 2.用訊號量的方法 中sleep的位置比較重要 1.用互斥鎖 條件變數的方法的 include include include pthread mutex t mutex...
多執行緒模擬練習
package pxyhomeworkday11 第二題 分析以下需求,並用 實現 有100份禮品,兩人 小剛和小明 同時傳送,當剩下的禮品小於10份的時候則不再送出,利用多執行緒模擬該過程並將執行緒的名稱列印出來.列印格式 小剛送出了禮物,還剩99份禮物。小剛送出了禮物,還剩98份禮物。小明送出了...