1.同步代码块
public class Ticket implements Runnable{
private int tickets=100;
private Object obj=new Object();
@Override
public void run() {
while(true){
synchronized (obj){
if (tickets>0){
try {
Thread.sleep(50);
System.out.println(Thread.currentThread().getName()+"...剩余票数:"+--tickets);
}catch (Exception e){
e.printStackTrace();
}
}else {
return;
}
}
}
}
}
2.同步方法
public class Ticket implements Runnable{
private int tickets=100;
@Override
public void run() {
while(true){
ticket();
}
}
private synchronized void ticket(){
if (tickets>0){
try {
Thread.sleep(50);
System.out.println(Thread.currentThread().getName()+"...剩余票数:"+--tickets);
}catch (Exception e){
e.printStackTrace();
}
}else {
return;
}
}
}
3.同步锁
public class Ticket implements Runnable{
private int tickets=100;
Lock lock=new ReentrantLock(true);
@Override
public void run() {
while(true) {
try {
lock.lock();
Thread.sleep(50);
if(tickets>0){
System.out.println(Thread.currentThread().getName() + "...剩余票数:" + --tickets);
}
} catch (Exception e) {
e.printStackTrace();
}finally {
lock.unlock();
}
}
}
}