import java.util.concurrent.locks.Lock;
import java.util.concurrent.locks.ReentrantLock;
//第一种加锁方式 lock 和 unlock
class myThread implements Runnable{
//售票总数
private int tickets = 100;
//定义锁
private Lock lock = new ReentrantLock();
public void run(){
while(true){
//加锁
lock.lock();
if(tickets>0){
try{
Thread.sleep(100);
}catch(InterruptedException e){
e.printStackTrace();
}
System.out.println(Thread.currentThread().getName()+" "+(tickets--));
}
lock.unlock();
}
}
}
//第二种 synchronized
class MyRunnable implements Runnable{
private int tickets = 100;
public void run(){
while(true){
synchronized(this){
if(tickets>0){
try{
Thread.sleep(100);
}catch(InterruptedException e){
e.printStackTrace();
}
System.out.println(Thread.currentThread().getName()+" "+(tickets--));
}
}
}
}
}
public class Test {
public static void main(String[] args){
MyRunnable thread = new MyRunnable();
Thread t1 = new Thread(thread);
Thread t2 = new Thread(thread);
Thread t3 = new Thread(thread);
t1.start();
t2.start();
t3.start();
}
}