我用买火车票的案例来给大家举例;
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--)+"张");
}
}
}