_一个简单的卖票例子,主要突出_synchronized的作用。
// 基本的卖票例子import java.time.OffsetDateTime;/*** 真正的多线程开发,公司中的开发,降低耦合性* 线程就是一个单独的资源类,没有任何附属的操作!* 1、 属性、方法*/public class SaleTicketDemo01 {public static void main(String[] args) {// 并发:多线程操作同一个资源类, 把资源类丢入线程Ticket ticket = new Ticket();// @FunctionalInterface 函数式接口,jdk1.8 lambda表达式 (参数)->{ 代码 }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();}}// 资源类 OOPclass Ticket {// 属性、方法private int number = 30;// 卖票的方式// synchronized 本质: 队列,锁public synchronized void sale(){if (number>0){System.out.println(Thread.currentThread().getName()+"卖出了"+(number--)+"票,剩余:"+number);}}}
A卖出了30票,剩余:29A卖出了29票,剩余:28A卖出了28票,剩余:27A卖出了27票,剩余:26A卖出了26票,剩余:25B卖出了25票,剩余:24B卖出了24票,剩余:23B卖出了23票,剩余:22B卖出了22票,剩余:21B卖出了21票,剩余:20B卖出了20票,剩余:19B卖出了19票,剩余:18B卖出了18票,剩余:17B卖出了17票,剩余:16B卖出了16票,剩余:15B卖出了15票,剩余:14B卖出了14票,剩余:13B卖出了13票,剩余:12B卖出了12票,剩余:11B卖出了11票,剩余:10B卖出了10票,剩余:9B卖出了9票,剩余:8B卖出了8票,剩余:7B卖出了7票,剩余:6B卖出了6票,剩余:5B卖出了5票,剩余:4B卖出了4票,剩余:3B卖出了3票,剩余:2B卖出了2票,剩余:1B卖出了1票,剩余:0
