關於乙個多執行緒面試題的理解

2022-02-26 17:43:19 字數 886 閱讀 4908

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 ...