고전 다선정 문제(一)-다선정 매표
/**
* @ClassName Question11
* @Description: -
* @Author xtanb
* @Date 2019/10/22
* @Version V1.0
**/
class Ticket{
private int num = 300;
public synchronized void sales(){
if(num>0){
System.out.println(Thread.currentThread().getName()+" "+ num-- +" ,"+" "+num+" ");
}
}
}
public class Question11 {
public static void main(String[] args) {
Ticket ticket = new Ticket();
new Thread(()->{
for(int i=0;i<100;i++){
ticket.sales();
}
},"A").start();
new Thread(()->{
for(int i=0;i<100;i++){
ticket.sales();
}
},"B").start();
new Thread(()->{
for(int i=0;i<100;i++){
ticket.sales();
}
},"C").start();
}
} 2.0 ReentrantLock
package com.example.demo.study.questions;
import java.util.concurrent.locks.Lock;
import java.util.concurrent.locks.ReentrantLock;
/**
* @ClassName Question12
* @Description: TODO
* @Author xtanb
* @Date 2019/10/22
* @Version V1.0
**/
class Tickets{
private int num = 300;
private Lock lock = new ReentrantLock();
public void sales(){
try{
lock.lock();
if(num>0){
System.out.println(Thread.currentThread().getName()+" "+ num-- +" ,"+" "+num+" ");
}
}catch (Exception e){
e.printStackTrace();
}finally {
lock.unlock();
}
}
}
public class Question12 {
public static void main(String[] args) {
Tickets tickets = new Tickets();
new Thread(()->{
for(int i=0;i<100;i++){
tickets.sales();
}
},"A").start();
new Thread(()->{
for(int i=0;i<100;i++){
tickets.sales();
}
},"B").start();
new Thread(()->{
for(int i=0;i<100;i++){
tickets.sales();
}
},"C").start();
}
}