当前位置: 首页 > 后端技术 > Java

多线程实现火车票销售

时间:2023-04-01 21:10:15 Java

多线程实现火车票销售使用三种方式:(1)基于runnableatomicInteger(2)基于runnablesynchronized(3)基于runnablereentrantlock具体代码:packagecom.high.ticket;importjava.util.concurrent.TimeUnit;importjava.util.concurrent.atomic.AtomicInteger;公共类TickerSeller01实现Runnable{publicstaticAtomicIntegerticketSum=newAtomicInteger(Constant.ticketSum);@Overridepublicvoidrun(){intcount=0;while((count=ticketSum.decrementAndGet())>=0){try{TimeUnit.MILLISECONDS.sleep(100);}catch(InterruptedExceptione){e.printStackTrace();}System.out.println(Thread.currentThread().getName()+"已售出"+++count+"门票");}}publicstaticvoidmain(String[]args){Threadt1=newThread(newTickerSeller01(),"1号窗口");Threadt2=newThread(newTickerSeller01(),"2号窗口");Threadt3=newThread(newTickerSeller01(),"3号窗口"口");Threadt4=newThread(newTickerSeller01(),"四号窗口");t1.start();t2.start();t3.start();t4.start();}}packagecom.high.ticket;importjava.util.concurrent.TimeUnit;publicclassTickerSeller02implementsRunnable{privateintindex=1;privatebooleanchange=true;privatefinalstaticObjectobject=newObject();@Overridepublicvoidrun(){synchronized(object){while(index<=Constant.ticketSum&&change){System.out.println(Thread.currentThread().getName()+"卖了第:"+(index++)+"张票");尝试{TimeUnit.MILLISECONDS.sleep(100);}catch(InterruptedExceptione){e.printStackTrace();}change=false;}change=true;}}publicstaticvoidmain(String[]args){finalTickerSeller02任务=新TickerSeller02();for(inti=0;i0){try{lock.lock();卖票();}finally{//释放锁lock.unlock();}}}privatevoidsellTicket(){if(Constant.ticketSum>0){try{TimeUnit.MILLISECONDS.sleep(100);}catch(InterruptedExceptione){e.printStackTrace();}System.out.println(Thread.currentThread().getName()+"售票号"+(Constant.ticketSum--)+"门票");}}publicstaticvoidmain(String[]args){//创建资源对象TickerSeller03task=newTickerSeller03();for(inti=0;i