課本p150
volatile不能保證原子操作,用synchronized關鍵字修飾方法能保持同步。按題目「如何將某個物件的a方法內的乙個**塊和另乙個方法b實現同步」,可以將物件的a方法內的乙個**塊用synchronized修飾,另乙個方法b也用synchronized修飾,就能實現同步。但是好亂,讓**塊和方法同步?我不太懂。課本例9.8是生成兩個執行緒
class
threada
implements
runnable
public
void
run(
)while
(i==0)
;}catch
(interruptedexception e)
system.out.
println
("threadb is stopped.");
}}class
threadb
implements
runnable
catch
(interruptedexception e)
system.out.
println
("threada has run 10s.");
a.geti(1
);}public
void
geta
(threada _a)
}public
class
book0909_0
}
開始的時候a和b寫反了,不要介意。最後發現題做錯了。
分析一下,b執行緒執行10s後,被a執行緒中止。
前面一句應該是不論a,b執行緒執行順序,只要b執行了10s就會發生;後一句是被a中止,應該是傳遞了訊息然後a使b被中止。
如果a可以知道b執行了多久就好了,目前想還是在b裡面sleep,到點後接受a的訊息。
class
threada1
implements
runnable
public
void
run()}
class
threadb1
implements
runnable
public
void
run(
)catch
(interruptedexception e)
}while
(i==0)
; system.out.
println
("threadb is stopped.");
}}public
class
book0909_1
}
同學提到可以用喚醒,但是a就必須拿到b的時間,目前得到其他執行緒執行時間和主動停止其他執行緒的方法還沒有學到。
補充題1.
volatile指示jvm這個變數是不穩定的,每次使用它都到主存中進行讀取。一般來說,多執行緒環境下各執行緒間的共享變數都應該加volatile修飾。
class
shaoshui
implements
runnable
catch
(interruptedexception e)
trycatch
(interruptedexception e)
}/* public shaoshui(int _t)*/
}public
class
edit0902
public
static
void
main
(string[
] args)
catch
(interruptedexception e)
trycatch
(interruptedexception e)
trycatch
(interruptedexception e)
trycatch
(interruptedexception e)
system.out.
println
("可以泡茶");
}}
C Prime 第九章前30題
a 選擇list,因為可能在容器中間插入元素.也可以選擇vector,全部讀取完畢後,直接sort.b 選擇deque,因為插入刪除操作只在頭部進行.c 選擇vector.list data 迭代器範圍 兩個迭代器指向同一容器,或者是容器最後乙個元素之後的位置,begin遞增若干次後等於end.in...
程式設計珠璣第九章
1 記憶體訪問 連續記憶體訪問與跨頁面訪問記憶體的區別 注意在訪問記憶體的時候,要注意記憶體的連續性,如果訪問的記憶體不是連續的,那麼程式的執行速度也會受到極大的影響 例如訪問乙個二維陣列時,先訪問行,再訪問列,能夠減少頁面排程次數,同時cache命中率也相對高些。2 遞迴呼叫巨集時,需要小心,巨集...
第九章(筆記)
轉移指令是可以修改ip,或同時修改cs和ip的指令 offset 是用於提取標號偏移位址的操作符 jmp在第2章裡說到時用於修改ip或同時修改cs和ip的轉移指令,這章裡單獨的jmp指令是乙個無條件的轉移指令 jmp short 標號 是實現段內短轉移 jmp near ptr 標號 是實現段內近轉...