mytest t2 = new mytest();原題目是這樣的:
根據執行緒安全的相關知識,分析以下**,當呼叫test方法時i>10時是否會引起死鎖?並簡要說明理由。
public
void test(int i)}}
個人理解,這個,死不死鎖,跟 int i,一點關係都沒有,因為,如果要當成執行緒執行的方法,test必須寫成 public void test(object i){} 這個形式的,不然編譯都會報錯,
而造成死鎖的關鍵,就是lock(this);這句的意思,鎖定當前例項;注意:是當前例項;
我的理解是,如果多執行緒執行的是乙個例項的該方法,那麼,lock是起作用的,當i <10;肯定死鎖了,因為永遠都跳不出去了;
而如果每個執行緒執行的都是單獨的例項,比如
mytest t1 = new mytest();mytest t2 = new mytest();mytest t3 = new mytest();
thread th1 = new thread(t1.test); thread th2 = new thread(t2.test);thread th3 = new thread(t3.test);
那麼,這個lock是不起作用的; 這個可以通過輸入 thread.currentthread.managedthreadid 來驗證;(這是執行緒的id)
所以,這麼看 最標準的lock物件,應該是這樣的 ,private static object ob = new object(); lock(ob){}
因為 private可以保證幾乎不會外界的人來修改ob,而static 又保證了,不管多少例項,都只有乙個ob,這樣才能真正鎖住**段吧?
以上是個人的理解,不知道對不對,希望看到文章的朋友,多交流下,這個地方,我也一直都很迷糊;
乙個多執行緒的面試題
面試題的大意是 啟動三個執行緒,分別列印a b c,每個列印十遍,列印的順序為abcabcabc.我的思路是用了執行緒同步技術中的事件manualresetevent事件,用到方法有 set 將事件的狀態設定為終止狀態,允許乙個或多個等待的執行緒繼續 reset 將事件的狀態設定為非終止狀態,導致執...
多執行緒面試題 一
1 多執行緒有幾種實現方案,分別是哪幾種?兩種。繼承thread類 實現runnable介面 擴充套件一種 實現callable介面。這個得和執行緒池結合。2 同步有幾種方式,分別是什麼?兩種。同步 塊 同步方法3 啟動乙個執行緒是run 還是start 它們的區別?start run 封裝了被執行...
多執行緒面試題
題目 主線程執行10次,子執行緒執行10次,此過程重複50次 package com.thread.test function 主線程執行10次,子執行緒執行10次,此過程重複50次 public class threadproblem start for int j 0 j 50 j class ...