JUC | |
---|---|
1 | 狂神JUC——传统的Synchronized锁 |
2 | 狂神JUC——Lock锁 |
3 | 狂神JUC——Lock版生产者和消费者 |
4 | 狂神JUC——Synchronized版的生产者和消费者问题 |
5 | 狂神JUC——8锁现象彻底理解锁 |
6 | 狂神JUC——集合不安全 |
7 | 狂神JUC——走近Callable |
8 | 狂神JUC——CountDownLatch,CyclicBarrier,Semaphore |
9 | 狂神JUC——读写锁 |
10 | 狂神JUC——阻塞队列 |
11 | 狂神JUC——同步队列 |
12 | 狂神JUC——线程池 |
13 | 狂神JUC——7大参数及自定义线程池 |
14 | 狂神JUC——四大函数接口 |
15 | 狂神——Stream流式计算 |
16 | 狂神——链式编程 |
17 | 狂神JUC——ForkJoin |
18 | 狂神JUC——异步回调 |
19 | 狂神JUC——单例模式 |
20 | 狂神JUC——CAS |
21 | 狂神JUC——可重入锁 |
22 | 狂神JUC——自旋锁 |
package com.company;
public class SynchronizedTest {public static void main(String[] args) {
Ticket ticket = new Ticket();
new Thread(()->{
for (int i = 0;
i < 30;
i++) {
ticket.sale();
}
},"学生A").start();
new Thread(()->{
for (int i = 0;
i < 30;
i++) {
ticket.sale();
}
},"学生B").start();
new Thread(()->{
for (int i = 0;
i < 30;
i++) {
ticket.sale();
}
},"学生C").start();
}
}class Ticket{
private int number = 30;
//卖票的方式
//synchronized 本质:队列、锁
public synchronized void sale(){
if(number > 0){
System.out.println(Thread.currentThread().getName()
+ "买到了第" + (number--) + "票,剩余:" + number
);
}
}
}
运行结果:
文章图片
【狂神JUC——传统的Synchronized锁】详细信息请看狂神视频