thread和runnable區別
執行多執行緒操作可以選擇
繼承thread類
實現runnable介面
1.繼承thread類
以賣票視窗舉例,一共5張票,由3個視窗進行售賣(3個執行緒)。
**:
package thread;
public class threadtest
}class mythreadtest extends thread
public void run()
system.out.println(name + " = " + ticket--);
} } }
執行結果:
視窗1 = 5
視窗1 = 4
視窗1 = 3
視窗1 = 2
視窗1 = 1
視窗2 = 5
視窗3 = 5
視窗2 = 4
視窗3 = 4
視窗3 = 3
視窗3 = 2
視窗3 = 1
視窗2 = 3
視窗2 = 2
視窗2 = 1
結果一共賣出了5*3=15張票,這違背了"5張票"的初衷。
造成此現象的原因就是:
mythreadtest mt1 = new mythreadtest("視窗1");
mythreadtest mt2 = new mythreadtest("視窗2");
mythreadtest mt3 = new mythreadtest("視窗3");
mt1.start();
mt2.start();
mt3.start();
一共建立了3個mythreadtest物件,而這3個物件的資源不是共享的,即各自定義的ticket=5是不會共享的,因此3個執行緒都執行了5次迴圈操作。
2.實現runnable介面
同樣的例子,**:
package thread;
public class runnabletest
}class myrunnabletest implements runnable
system.out.println(thread.currentthread().getname() + " = " + ticket--);
} } }
結果:
視窗1 = 5
視窗1 = 2
視窗3 = 4
視窗2 = 3
視窗1 = 1
結果賣出了預期的5張票。
原因在於:
myrunnabletest mt = new myrunnabletest();
thread mt1 = new thread(mt,"視窗1");
thread mt2 = new thread(mt,"視窗2");
thread mt3 = new thread(mt,"視窗3");
mt1.start();
mt2.start();
mt3.start();
只建立了乙個myrunnabletest物件,而3個thread執行緒都以同乙個myrunnabletest來啟動,所以他們的資源是共享的。 JAVA多執行緒之Runnable和Thread比較
在我們開發的過程中常常會碰到多執行緒的問題,對於多執行緒的實現方式主要有兩種 實現runnable介面 繼承thread類。對於這兩種多執行緒的實現方式也是有著一些差異。既然實現了多執行緒那必然離不開管理這些執行緒,當問題比簡單時乙個或者幾個執行緒就ok了,也涉及不到效率問題。一旦執行緒數量多起來的...
註解及多執行緒
註解 自定義註解 成員型別受限 基本型別及string class annotation enumeration 註解中成員取名為name 可以用default為成員指定預設值 內建註解 override 重寫 depercateed 過時 suppresswaring 元註解 target 多執行...
VC MFC 多執行緒及執行緒同步
自動事件 cevent類的建構函式,第二個引數為false,是自動事件,自動事件在呼叫setevent函式被使用後能夠自動恢復為無訊號狀態。預設情況下,是自動事件。1 宣告事件為全域性物件。包含使用執行緒同步物件所需要的標頭檔案 include afxmt.h cevent eventobj 構造乙...