public class SellTicket02 implements Runnable {
private int tickets = 100; private Lock lock=new ReentrantLock();
@Override public void run() { while (true) { try { lock.lock(); if (tickets > 0) { try { Thread.sleep(1); } catch (InterruptedException e) { e.printStackTrace(); } System.out.println(Thread.currentThread().getName() + "正在出售第" + tickets + "张票"); tickets--; } }finally { lock.unlock(); }
} } } ------------------------------------------------------------------------------------------------------------------- public class SellTicket implements Runnable {
// private int tickets = 100; private static int tickets = 100; //private Object obj=new Object(); private int x=0;
@Override public void run() { while (true) { if(x%2==0){ // synchronized (this){ synchronized (SellTicket.class){ if (tickets > 0) { //通过sleep模拟出票时间 try { Thread.sleep(1); } catch (InterruptedException e) { e.printStackTrace(); } System.out.println(Thread.currentThread().getName() + "正在出售第" + tickets + "张票"); tickets--; } } }else { sellTic(); } x++; } }
// private synchronized void sellTic() { private static synchronized void sellTic() { if (tickets > 0) { try { Thread.sleep(1); } catch (InterruptedException e) { e.printStackTrace(); } System.out.println(Thread.currentThread().getName() + "正在出售第" + tickets + "张票"); tickets--; } } } ----------------------------------------------------------------------------------------------------------------------- public class SellTicketDemo { public static void main(String[] args) { // SellTicket st=new SellTicket(); SellTicket02 st=new SellTicket02();
Thread t1=new Thread(st,"窗口一"); Thread t2=new Thread(st,"窗口二"); Thread t3=new Thread(st,"窗口三");
t1.start(); t2.start(); t3.start(); } } |
|