传统的synchronized锁

HeJin大约 2 分钟JavaJUC并发编程

线程就是一个单独的资源类,没有任何附属操作。

  • 属性
  • 方法
public class SafeTicketDemo1 {
    public static void main(String[] args) {
        // 把资源类丢入线程
        Ticket ticket = new Ticket();

        new Thread(() -> {
            for (int i = 0; i < 40; i++) {
                ticket.sale();
            }
        }, "A").start();
        new Thread(() -> {
            for (int i = 0; i < 40; i++) {
                ticket.sale();
            }
        }, "B").start();
        new Thread(() -> {
            for (int i = 0; i < 40; i++) {
                ticket.sale();
            }
        }, "C").start();

    }
}

/**
 * 资源类 OOP编程
 */
class Ticket{
    private int num = 30;

    /**
     * synchronized本质:队列 + 锁
     */
    public synchronized void sale(){
        if (num > 0){
            System.out.println(Thread.currentThread().getName()+"卖出了第"+num--+"张票,剩余:"+num);
        }
    }
}
A卖出了第30张票,剩余:29
A卖出了第29张票,剩余:28
B卖出了第28张票,剩余:27
B卖出了第27张票,剩余:26
B卖出了第26张票,剩余:25
B卖出了第25张票,剩余:24
B卖出了第24张票,剩余:23
B卖出了第23张票,剩余:22
B卖出了第22张票,剩余:21
B卖出了第21张票,剩余:20
B卖出了第20张票,剩余:19
B卖出了第19张票,剩余:18
B卖出了第18张票,剩余:17
B卖出了第17张票,剩余:16
B卖出了第16张票,剩余:15
B卖出了第15张票,剩余:14
B卖出了第14张票,剩余:13
B卖出了第13张票,剩余:12
B卖出了第12张票,剩余:11
B卖出了第11张票,剩余:10
B卖出了第10张票,剩余:9
B卖出了第9张票,剩余:8
B卖出了第8张票,剩余:7
B卖出了第7张票,剩余:6
B卖出了第6张票,剩余:5
B卖出了第5张票,剩余:4
B卖出了第4张票,剩余:3
B卖出了第3张票,剩余:2
B卖出了第2张票,剩余:1
B卖出了第1张票,剩余:0

Process finished with exit code 0