1 package demo08; 2 3 import java.util.concurrent.locks.Lock; 4 import java.util.concurrent.locks.ReentrantLock; 5 6 //使用Lock接口替换同步代码块, 实现线程的安全性 7 //实现类 ReentrantLock 8 public class SaleThread implements Runnable { 9 private int ticket = 10; //10张票 10 private Lock lock = new ReentrantLock(); 11 public void run() { 12 while (true) { 13 //获取锁 14 lock.lock(); 15 //对票数判断 16 if (ticket > 0) { 17 try { 18 Thread.sleep(10); 19 } catch (InterruptedException e) { 20 System.out.println(e.getMessage()); 21 } 22 System.out.println(Thread.currentThread().getName()+"出售第"+ticket--); 23 } 24 //释放锁 25 lock.unlock(); 26 } 27 } 28 }
1 package demo08; 2 3 public class ThreadDemo { 4 public static void main(String[] args) { 5 SaleThread ticket = new SaleThread(); 6 //创建并开启四个线程 7 new Thread(ticket).start(); 8 new Thread(ticket).start(); 9 new Thread(ticket).start(); 10 } 11 }