packagecom.zhbxgg;importjava.util.concurrent.locks.Lock;importjava.util.concurrent.locks.ReentrantLock;publicclass test2 {publicstaticvoidmain(String[] args){Ticket2 ticket2 =newTicket2();newThread(()->{for(int i =0; i <20; i++){ ticket2.save();}},"售票员A").start();newThread(()->{for(int i =0; i <20; i++){ ticket2.save();}},"售票员B").start();newThread(()->{for(int i =0; i <20; i++){ ticket2.save();}},"售票员C").start();}}classTicket2{int num =10;int rest =0;Lock lock =newReentrantLock();voidsave(){
lock.lock();try{if(num>0){
rest++;
num--;System.out.println(Thread.currentThread().getName()+"---"+"开始卖第"+rest+"张票"+"剩余"+num+"张票");}}finally{
lock.unlock();}}}
多线程卖票案例:package com.zhbxgg;import java.util.concurrent.locks.Lock;import java.util.concurrent.locks.ReentrantLock;public class test2 { public static void main(String[] args) { Ticket2 ticket2 = new Ticket2(); new Thread(()->{