問題這是一段Java學習中的例程,四個車站分別搶票。但是無法實現(xiàn)線程安全。需求實現(xiàn)線程安全注釋saleT代表車站的類靜態(tài)類balance代表剩余的票數(shù)s1-s4分別代表四個車站我在能用sync修飾的地方都打上了sync,為什么還是無法實現(xiàn)線程安全?↓下面是代碼內容packagecom.hssgweb.多線程;//importjava.util.concurrent.locks.ReentrantLock;classbalance{staticdoubleb=1000;publicstaticdoublegetB(){returnb;}publicstaticvoidsetB(doubleb){balance.b=b;}}publicclass鐵路12306{publicstaticvoidmain(String[]args){//主方法SaleTs1=newSaleT("1號");SaleTs2=newSaleT("2號");SaleTs3=newSaleT("3號");SaleTs4=newSaleT("4號");Threadth1=newThread(s1);Threadth2=newThread(s2);Threadth3=newThread(s3);Threadth4=newThread(s4);th1.start();th2.start();th3.start();th4.start();}}classSaleTimplementsRunnable{//Locklock=newReentrantLock();StringsaleId;doublebalan;publicSaleT(StringsaleId){super();this.saleId=saleId;}synchronizedvoidpay(){//pay方法balan=balance.getB()-1;//剩余票數(shù)等于原來的票數(shù)減1balance.setB(balan);/*System.out.println(balan);balan=ti.b.getB();*/}inti=0;//記錄一下這玩意兒總共搶了多少張票publicsynchronizedvoidrun(){while(balance.getB()>0){pay();System.out.println("我是"+saleId+"我為自己代言"+"---還剩下"+balance.getB());i++;}System.out.println("我是"+saleId+"我搶了"+i);}}
在能同步的地方都已經(jīng)同步了,為什么還是發(fā)生線程污染?
尚方寶劍之說
2019-04-27 22:16:28