本文共 2193 字,大约阅读时间需要 7 分钟。
/** * 卖票 企业级套路 + 模板 * 1. 在高内聚低耦合的前提下: 线程 操作(对外暴露的调用方法) 资源类 * 高内聚: 资源类对外暴露的功能只在自己身上实现 低耦合: 调用者和 资源类之间并无关系 */public class SaleTicket { public static void main(String[] args) { // 资源类 Ticket ticket = new Ticket(); // 线程 Thread(Runnable target, String ThreadName) new Thread(new Runnable() { @Override public void run() { for (int i = 0; i <= 30 ; i++) { ticket.saleTicket(); } } }, "售票员A").start(); new Thread(new Runnable() { @Override public void run() { for (int i = 0; i <= 30 ; i++) { ticket.saleTicket(); } } }, "售票员B").start(); new Thread(new Runnable() { @Override public void run() { for (int i = 0; i <= 30 ; i++) { ticket.saleTicket(); } } }, "售票员C").start(); }}// 资源类class Ticket { private int number = 30; // 操作 public synchronized void saleTicket(){ if(number > 0) { System.out.println(Thread.currentThread().getName() + "\t卖出第" + (number--) + "\t 还剩下:" + number); } }}
进一步优化锁的粒度
class Ticket { private int number = 30; private Lock lock = new ReentrantLock();// 可重入锁 // 操作 public void saleTicket(){ lock.lock(); try { if(number > 0) { System.out.println(Thread.currentThread().getName() + "\t卖出第" + (number--) + "\t 还剩下:" + number); } }finally { lock.unlock(); } }}
/** * 卖票 企业级套路 + 模板 * 1. 在高内聚低耦合的前提下: 线程 操作(对外暴露的调用方法) 资源类 * 高内聚: 资源类对外暴露的功能只在自己身上实现 低耦合: 调用者和 资源类之间并无关系 */public class SaleTicket { public static void main(String[] args) { // 资源类 Ticket ticket = new Ticket(); // 线程 Thread(Runnable target, String ThreadName) new Thread(() -> { for (int i = 0; i <= 30 ; i++) ticket.saleTicket(); }, "售票员A").start(); new Thread(() -> { for (int i = 0; i <= 30 ; i++) ticket.saleTicket(); }, "售票员B").start(); new Thread(() -> { for (int i = 0; i <= 30 ; i++) ticket.saleTicket(); }, "售票员C").start(); }}// 资源类class Ticket { private int number = 30; private Lock lock = new ReentrantLock();// 可重入锁 // 操作 public void saleTicket(){ lock.lock(); try { if(number > 0) { System.out.println(Thread.currentThread().getName() + "\t卖出第" + (number--) + "\t 还剩下:" + number); } }finally { lock.unlock(); } }}
转载地址:http://hhxzb.baihongyu.com/