天天看点

synchronized 线程同步的三种使用方式

我用买火车票的案例来给大家举例;

1.在程序中加锁,同步代码块

public class HuoChePiao implements Runnable{

private int ticketNum=10;

@Override

public void run() {

for (int i = 1; i <=100; i++) {

synchronized (this) {

if(ticketNum>0){

System.out.println("我在"+Thread.currentThread().getName()+"买到了火车票,剩余"+(ticketNum--)+"张");

}

}

}

}

2.同步方法

public class HuoChePiao implements Runnable{

private int ticketNum=10;

@Override

public void run() {

for (int i = 1; i <=100; i++) {

buy();

}

}

public synchronized void buy(){

if(ticketNum>0){

System.out.println("我在"+Thread.currentThread().getName()+"买到了火车票,剩余"+(ticketNum--)+"张");

}

}

}

3.同步静态方法

public class HuoChePiao implements Runnable{

private static  int ticketNum=10;

@Override

public void run() {

for (int i = 1; i <=100; i++) {

buy();

}

}

public static synchronized void buy(){

if(ticketNum>0){

System.out.println("我在"+Thread.currentThread().getName()+"买到了火车票,剩余"+(ticketNum--)+"张");

}

}

}