package com.qcby.lock;
/**
* @author HuangHaiyang
* @date 2020/07/02
* @description: description
* @version: 1.0.0
*/
public class JucTest {
public static void main(String[] args) {
Ticket ticket=new Ticket();
new Thread(()->{
for (int i = 0; i <40 ; i++) {
ticket.sell();
} },"一號").start();
new Thread(()->{
for (int i = 0; i <40 ; i++) {
ticket.sell();
} },"二號").start();
new Thread(()->{
for (int i = 0; i <40 ; i++) {
ticket.sell();
}},"三號").start();
}
static class Ticket{
private int number=30;
private synchronized void sell(){
if(number>0){
System.out.println(Thread.currentThread().getName()+"窗口賣出了第"+number+"張票"+"剩餘"+--number+"張票");
}
}
}
//一號窗口賣出了第30張票剩餘29張票
//一號窗口賣出了第29張票剩餘28張票
//一號窗口賣出了第28張票剩餘27張票
//二號窗口賣出了第27張票剩餘26張票
//二號窗口賣出了第26張票剩餘25張票
//二號窗口賣出了第25張票剩餘24張票
//二號窗口賣出了第24張票剩餘23張票
//二號窗口賣出了第23張票剩餘22張票
//二號窗口賣出了第22張票剩餘21張票
//二號窗口賣出了第21張票剩餘20張票
//二號窗口賣出了第20張票剩餘19張票
//二號窗口賣出了第19張票剩餘18張票
//二號窗口賣出了第18張票剩餘17張票
//二號窗口賣出了第17張票剩餘16張票
//二號窗口賣出了第16張票剩餘15張票
//二號窗口賣出了第15張票剩餘14張票
//二號窗口賣出了第14張票剩餘13張票
//二號窗口賣出了第13張票剩餘12張票
//二號窗口賣出了第12張票剩餘11張票
//二號窗口賣出了第11張票剩餘10張票
//二號窗口賣出了第10張票剩餘9張票
//二號窗口賣出了第9張票剩餘8張票
//二號窗口賣出了第8張票剩餘7張票
//二號窗口賣出了第7張票剩餘6張票
//二號窗口賣出了第6張票剩餘5張票
//二號窗口賣出了第5張票剩餘4張票
//二號窗口賣出了第4張票剩餘3張票
//二號窗口賣出了第3張票剩餘2張票
//二號窗口賣出了第2張票剩餘1張票
//二號窗口賣出了第1張票剩餘0張票
//
//Process finished with exit code 0
}
lock鎖
package com.qcby.lock;
import java.util.concurrent.locks.Lock;
import java.util.concurrent.locks.ReentrantLock;
/**
* @author HuangHaiyang
* @date 2020/07/02
* @description: description
* @version: 1.0.0
*/
public class JucTest {
public static void main(String[] args) {
Ticket ticket=new Ticket();
new Thread(()->{
for (int i = 0; i <40 ; i++) {
ticket.sell();
} },"一號").start();
new Thread(()->{
for (int i = 0; i <40 ; i++) {
ticket.sell();
} },"二號").start();
new Thread(()->{
for (int i = 0; i <40 ; i++) {
ticket.sell();
}},"三號").start();
}
static class Ticket{
private int number=30;
private Lock lock=new ReentrantLock();
private void sell(){
lock.lock();
try {
if(number>0){
System.out.println(Thread.currentThread().getName()+"窗口賣出了第"+number+"張票"+"剩餘"+--number+"張票");
}
} catch (Exception e) {
e.printStackTrace();
} finally {
lock.unlock();
}
}
}
//一號窗口賣出了第30張票剩餘29張票
//一號窗口賣出了第29張票剩餘28張票
//一號窗口賣出了第28張票剩餘27張票
//一號窗口賣出了第27張票剩餘26張票
//三號窗口賣出了第26張票剩餘25張票
//三號窗口賣出了第25張票剩餘24張票
//三號窗口賣出了第24張票剩餘23張票
//二號窗口賣出了第23張票剩餘22張票
//二號窗口賣出了第22張票剩餘21張票
//二號窗口賣出了第21張票剩餘20張票
//二號窗口賣出了第20張票剩餘19張票
//二號窗口賣出了第19張票剩餘18張票
//二號窗口賣出了第18張票剩餘17張票
//二號窗口賣出了第17張票剩餘16張票
//二號窗口賣出了第16張票剩餘15張票
//二號窗口賣出了第15張票剩餘14張票
//二號窗口賣出了第14張票剩餘13張票
//二號窗口賣出了第13張票剩餘12張票
//二號窗口賣出了第12張票剩餘11張票
//二號窗口賣出了第11張票剩餘10張票
//二號窗口賣出了第10張票剩餘9張票
//二號窗口賣出了第9張票剩餘8張票
//二號窗口賣出了第8張票剩餘7張票
//二號窗口賣出了第7張票剩餘6張票
//二號窗口賣出了第6張票剩餘5張票
//二號窗口賣出了第5張票剩餘4張票
//二號窗口賣出了第4張票剩餘3張票
//二號窗口賣出了第3張票剩餘2張票
//二號窗口賣出了第2張票剩餘1張票
//二號窗口賣出了第1張票剩餘0張票
//
//Process finished with exit code 0
}