用于解决多线程安全问题的方式:
1. 同步代码块 (隐式锁)
2. 同步方法(隐式锁)
3. 同步锁 Lock( jdk 1.5 后)
注意:是一个显示锁,需要通过 lock() 方法上锁,必须通过 unlock() 方法进行释放锁
下面举一个售票例子:
1)同步代码块
package com.lxj.juc;
public class TestSync {
public static void main(String[] args) {
Ticket ticket = new Ticket();
new Thread(ticket).start();
new Thread(ticket).start();
new Thread(ticket).start();
}
}
class Ticket implements Runnable{
private int ticket = 100;
@Override
public void run() {
while(true) {
synchronized(this) { //this代表对当前对象上锁
if(ticket > 0) {
try {
Thread.sleep(200);
} catch (InterruptedException e) {
e.printStackTrace();
}
System.out.println(Thread.currentThread().getName()+" : 购票成功,余票为:" + --ticket );
}else {
break;
}
}
}
}
}
运行结果:
Thread-0 : 购票成功,