黑馬程式設計師 11執行緒同步問題 生產者消費者問題

2021-06-25 16:36:32 字數 2577 閱讀 2714

------- 

android培訓

、ios培訓

、期待與您交流! ----------

一、執行緒同步問題

public class testsynchthread implements runnablecatch(interruptedexception e)

}

/*

m2方法加鎖之後,程式最終的輸出結果是:子執行緒執行結果k:1000,main執行緒執行結果:1000,為什麼main執行緒也是1000呢,是因為t1執行緒執行完成之後,緊接著執行m2方法,但是m2方法卻睡了,此時,直接跳入執行下乙個語句,輸出了結果。但是如果,t1執行緒睡眠的時間大於m2方法的休眠時間,那麼結果又會出現不同

*/

public synchronized  static void m2()catch(interruptedexception e)

k=2000;

}

public static void main(string args)
public void run()

}//輸出結果為:子執行緒執行結果k:1000;main執行緒執行結果:2000;

分析原因:首先執行t1執行緒,k的值變為1000;此時main執行緒同時也在執行,但是由於m2方法中,執行緒sleep為2秒,而t1執行緒只sleep 1秒,所以t1執行緒先輸出了「子執行緒執行結果」,之後m2方法在完成2秒的睡眠後,開始執行,並將k的值設定為2000,最後主線程輸出結果為2000。這裡如果m2方法不加鎖,就需要根據睡眠時間的長短來判斷k的值了

但是如果m2方法此時加鎖之後,輸出結果就會出現不同。

二、生產者消費者問題

public class testsynchthread2

}

class wotou

public string tostring()

}

class wotousynstackcatch(interruptedexception e)

}

this.notify();

arrwt[index]=wt;

index++;

}

public synchronized wotou pop()catch(interruptedexception e)

}

this.notify();

index--;

return arrwt[index];

}

}

class producer implements runnable

public void run()catch (interruptedexception e)

}

}

}

class consumer implements runnable

public void run()catch (interruptedexception e)

}

}

}

//錯誤提示問題說明:

//錯誤提示問題說明:

出現這個錯誤的原因主要是:

程式裡面少寫了乙個大括號

黑馬程式設計師 執行緒

多執行緒有兩種實現方法,分別是繼承thread類與實現runnable介面 同步的實現方面有兩種,分別是synchronized,wait與notify wait 使乙個執行緒處於等待狀態,並且釋放所持有的物件的lock。sleep 使乙個正在執行的執行緒處於睡眠狀態,是乙個靜態方法,呼叫此方法要捕...

黑馬程式設計師 執行緒

我理解看來這個這個就是乙個程式可以同時執行不同的 我的理解就是讓程式可以同時執行不同的 至於執行的順序就看系統怎麼調配。第一種方式 繼承thread 第二種方式 1.定義實現runnable介面 2.覆蓋runnable介面當中的run方法 將執行緒要執行的 都放到run方法當中去。3.通過thre...

黑馬程式設計師 執行緒 多執行緒

asp.net android io開發 net培訓 期待與您交流!執行緒概念 執行緒是程序中執行運算的最小單位,亦即執行處理機排程的基本單位。如果把程序理解為在邏輯上作業系統所完成的任務,那麼執行緒表示完成該任務的許多可能的子任務之一。引入執行緒的好處 1 易於排程。2 提高併發性。通過執行緒可方...