實現Runnable完成線程,這樣的好處是靈活,因爲可以繼承其他類
同時也要重寫run()方法來描述線程的任務信息,由新的類的 對象來構建Thread類的對象,調用strat方法來開啓線程(這種方式常用)
線程競爭關係圖:
public static void main(String[] args) {
RDemo r=new RDemo("111");
//由於沒有繼承Threa類,所以沒有start()方法來啓動線程
//所以需要創建線程對象,完成線程啓動
//由於Thread類和我們自己創建的RDemo都實現了Runnable,所以他們是同類關係
//所以是同類對象給本類對象提供了新的功能-----這是裝飾者設計模式
Thread t1=new Thread(r);
//開啓線程
t1.start();
//開啓主線程
for (int i = 0; i < 20; i++) {
System.out.println("這是主線程:"+i);
//休眠只是爲了看效果
try {
//休眠有可能會不能重啓,所以異常處理
Thread.sleep(10);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
}
//實現Runnable完成線程,這樣的好處是靈活,並且可以繼承其他類
class RDemo implements Runnable{
//定義一個線程名字,用來區分線程
private String name;
public RDemo(String name){
this.name=name;
}
//需要重寫run()方法,來描述線程的內容(線程需要執行的功能)
@Override
public void run() {
for (int i = 0; i < 20; i++) {
System.out.println(name+":i="+i);
//還是使用休眠,看效果,實際上不用休眠,這裏是爲了效果明顯
try {
Thread.sleep(10);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
運行結果:
上一篇文章使用了繼承Thread類,實現線程:
JAVA版,線程初級入門案例一:繼承Thread類創建線程
下一篇:線程不安全的搶票程序(ps.我把輸出改成了搶糖果)
JAVA版本,線程三:線程實現賣票程序