java . util. concurrent
java . util . concurrent. atomic
java . util. concurrent. locks
package com.model.concurrent; import java.util.concurrent.locks.Lock; import java.util.concurrent.locks.ReentrantLock; public class SaleTicketDemo01{ static class Ticket { private int number=30; Lock lock=new ReentrantLock(); public void sale(){ lock.lock(); try { if (number>0) { System.out.println(Thread.currentThread().getName() + "卖出第" + (number--) + "还剩下:" + number); } }catch (Exception e){ e.printStackTrace(); }finally { lock.unlock(); } } } public static void main(String[] args) { Ticket ticket= new Ticket(); new Thread(new Runnable() { @Override public void run() { for (int i=1;i<=40;i++) { ticket.sale(); } } },"A").start(); new Thread(new Runnable() { @Override public void run() { for (int i=1;i<=40;i++) { ticket.sale(); } } },"B").start(); new Thread(new Runnable() { @Override public void run() { for (int i=1;i<=40;i++) { ticket.sale(); } } },"C").start(); } } class Ticket { private int number=30; Lock lock=new ReentrantLock(); public void slave(){ lock.lock(); try { System.out.println(Thread.currentThread().getName()+"没出第"+(number--)+"还剩下:"+number); }catch (Exception e){ e.printStackTrace(); }finally { lock.unlock(); } } }
package com.model.concurrent; import java.util.concurrent.locks.Lock; import java.util.concurrent.locks.ReentrantLock; public class SaleTicketDemo01{ static class Ticket { private int number=30; Lock lock=new ReentrantLock(); public void sale(){ lock.lock(); try { if (number>0) { System.out.println(Thread.currentThread().getName() + "卖出第" + (number--) + "还剩下:" + number); } }catch (Exception e){ e.printStackTrace(); }finally { lock.unlock(); } } } public static void main(String[] args) { Ticket ticket= new Ticket(); new Thread(() ->{ for (int i=1;i<=40;i++) { ticket.sale(); } },"A").start(); new Thread(() ->{ for (int i=1;i<=40;i++) { ticket.sale(); } },"B").start(); new Thread(() ->{ for (int i=1;i<=40;i++) { ticket.sale(); } },"C").start(); } } class Ticket { private int number=30; Lock lock=new ReentrantLock(); public void slave(){ lock.lock(); try { System.out.println(Thread.currentThread().getName()+"没出第"+(number--)+"还剩下:"+number); }catch (Exception e){ e.printStackTrace(); }finally { lock.unlock(); } } }
原文:https://www.cnblogs.com/zzhAylm/p/14847308.html