前排我先說結論:
繼承Thread 實作多線程 ,
是 ‘ 不 易 ’ 實作 資源共享 (甚至不易我都加了符号的),
而不是 不能實作資源共享 !!!
看看現在網上的有些文章 (包括一些所謂的面試寶典,文字簡短但是害人不淺),随便截一些圖:

然後類似的例子 示範大緻如下 ,寫了個賣瓜例子:
咋一看好像确實是資源不共享 。
真的嗎,顯然是代碼寫的問題。
1、 private int watermelon=10; 瓜 數 是類的 一個 私有變量 。
2、 new了 兩個 賣瓜的攤子, 每個攤子 都有 自己的10個瓜 。
new TestThread().start();
new TestThread().start();
每個線程自己賣自己的瓜, 本來就是 每個攤子 10個瓜 ,這是超賣? 這是資源不共享問題?
這麼寫,明擺着不就是不同資源不同執行麼,何來所謂的資源共享問題?
現在看看,我把調用的實作代碼寫成這樣:
TestThread testThread=new TestThread();
new Thread(testThread).start();
new Thread(testThread).start();
運作結果,是不是就共享了 :
這樣存在的問題就是 ,需要考慮線程并發帶來的 資料同步問題 :
多運作幾次,可以看到出現了一些 壞現象
synchronized 了 :
把涉及到數量的變化的代碼塊,我們使用 synchronized 給它鎖起來 :
這樣一來,盡管多個線程同時進行,操作同個資源 ,也不會出現 壞現象 ,誰能搶到資源,誰執行,但是執行時,别的都需要耐心等 :
是以說, 記住了 !!!
繼承Thread類 實作多線程 和 實作 Runnable接口 實作多線程