同步代码块,同步方法,Lock接口
Object ojb=new Object();
同步代码块:
public void run(){
while(true){
synchronized (obj) {
if(ticket>0){
try {
Thread.sleep(500);
} catch (InterruptedException e) {
e.printStackTrace();
}
System.out.println(Thread.currentThread().getName()
+"窗口卖了第"+ticket--+"张票");
}
}
}
}
synchronized(obj){aaaaa}
同步方法:
aaa();
public synchronized void aaa(){aaaaaa}
public void run(){
while(true){
sale();
}
}
//同步方法
public synchronized void sale(){
//可能发生安全问题的代码放进来
if(ticket>0){
try {
Thread.sleep(500);
} catch (InterruptedException e) {
e.printStackTrace();
}
System.out.println(Thread.currentThread().getName()
+"窗口卖了第"+ticket--+"张票");
}
}
Lock接口方法:
private Lock lk=new ReentrantLock() //创建Lock对象
lk.lock();
aaaaaa;
lk.unlock();
private Lock lk=new ReentrantLock();
//重写run
public void run(){
while(true){
//获取锁
lk.lock();
if(ticket>0){
try {
Thread.sleep(500);
} catch (InterruptedException e) {
e.printStackTrace();
}
System.out.println(Thread.currentThread().getName()
+"窗口卖了第"+ticket--+"张票");
}
//释放锁
lk.unlock();
}
}