亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

繼承thread的線程不能使用同步方法嗎

繼承thread的線程不能使用同步方法嗎

大話西游666 2019-04-26 22:19:27
如下代碼所示,為什么繼承了Thread的線程使用同步方法的時候無法鎖住呢?而使用同步代碼塊就沒有問題package leetcode; import javax.swing.plaf.synth.SynthSeparatorUI; import com.sun.org.apache.xerces.internal.util.SynchronizedSymbolTable; public class mainEntry {     public static void main(String[] agrs)     {         // 創建 3 個窗口         TicketSell t1 = new TicketSell("A窗口");         TicketSell t2 = new TicketSell("B窗口");         TicketSell t3 = new TicketSell("C窗口");         // 啟動 3 個窗口進行買票         t1.start();         t2.start();         t3.start();     } } class TicketSell extends Thread {     private static int num = 50;     public TicketSell(String name)     {         super(name);     }     @Override     public void run()     {         for(int i = 0;i<50;i++)             sell();     }     public synchronized void sell() {         if (num > 0)         {             try             {                 // 模擬賣一次票所需時間                 Thread.sleep(10);             } catch (InterruptedException e)             {                 e.printStackTrace();             }             System.out.println(this.currentThread().getName() + "賣出一張票,剩余" + (--num) + "張");         }     } }這是輸出....A窗口賣出一張票,剩余2張C窗口賣出一張票,剩余1張B窗口賣出一張票,剩余0張A窗口賣出一張票,剩余-1張
查看完整描述

3 回答

?
拉莫斯之舞

TA貢獻1820條經驗 獲得超10個贊

上面這個寫法,synchronized 只是修飾了一個public方法,這個方法只屬于當前實例,同一個實例內才會同步
把方法改成static修飾或者像上面描述的那樣,synchronized修飾代碼塊也可以

查看完整回答
反對 回復 2019-05-14
?
qq_笑_17

TA貢獻1818條經驗 獲得超7個贊

可以啊,關鍵是看你選擇同步的鎖的類型,如你縮寫使用的是類實例作為鎖,而每個實例都被自己使用當然不涉及到互斥的問題。
Java并并發編程實踐中對共享變量所加的鎖應該是相同鎖。

查看完整回答
反對 回復 2019-05-14
  • 3 回答
  • 0 關注
  • 762 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號