1、同步锁,保证线程同步,作用在方法上面,此方法同一时刻只允许一个线程执行同步方法
这是锁方法:只能经一个线程,知道这条语句执行完
public synchronized void sale(){
if (num>0){
System.out.println(Thread.currentThread().getName()+"卖出了第"+num+"张票");
num--;
}
2、锁方法,线程都能进去
public void sale2(){
/*
* 同步代码块,给一段代码上锁,锁可以是任何对象,但是必须是多个线程共同拥有的对象
* 即多个线程拥有的是同一把锁,这样才可以起到互斥作用
* this当前对象锁,也可以用类.class
* 代码块同时只能被一个线程执行
* */
if (num>0){
synchronized (this){
System.out.println(Thread.currentThread().getName()+"卖出了第"+num+"张票");
num--;
}
try {
Thread.sleep(100);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}