问题这是一段Java学习中的例程,四个车站分别抢票。但是无法实现线程安全。需求实现线程安全注释saleT代表车站的类静态类balance代表剩余的票数s1-s4分别代表四个车站我在能用sync修饰的地方都打上了sync,为什么还是无法实现线程安全?↓下面是代码内容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;//剩余票数等于原来的票数减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);}}
UYOU
慕少森
相关分类