Demo.java:
package cn.xxx.demo; /* * 多线程并发访问同一个数据资源 * 3个线程,对一个票资源,出售 */ public class Demo { public static void main(String[] args) { //创建Runnable接口实现类对象 Tickets t = new Tickets(); //创建3个Thread类对象,传递Runnable接口实现类 Thread t0 = new Thread(t); Thread t1 = new Thread(t); Thread t2 = new Thread(t); t0.start();t1.start();t2.start(); } }Tickets.java(线程类,实现Runnable接口,重写run方法):
package cn.xxx.demo; import java.util.concurrent.locks.Lock; import java.util.concurrent.locks.ReentrantLock; /* * 使用JDK1.5 的接口Lock,替换synchronized同步,实现线程的安全性 * Lock接口方法: * lock() 获取锁 * unlock()释放锁 * 直接已知实现类ReentrantLock */ public class Tickets implements Runnable{ // 实现Runnable接口 private int ticket = 100; //在类的成员变量位置,创建Lock接口的实现类对象。 成员变量位置,所有线程可以共享该锁 private Lock lock = new ReentrantLock(); public void run(){ // 重写run方法 while(true){ lock.lock(); //调用Lock接口方法lock获取锁 if( ticket > 0){ try{ Thread.sleep(10); System.out.println(Thread.currentThread().getName()+" 出售第 "+ticket--); }catch(Exception ex){ }finally{ lock.unlock(); //释放锁,调用Lock接口方法unlock } } } } }