类Tickets实现Runnable:
import java.util.concurrent.locks.Lock; import java.util.concurrent.locks.ReentrantLock;
/* ?* 使用JDK1.5的接口Lock,来替换同步代码块,实现线程的安全性 ?* Lock接口方法: ?* ?? ??? ?lock() 获取锁 ?* ?? ??? ?unlock() 释放锁 ?* 实现类ReentrantLock ?*/ public class Tickets implements Runnable { ?? ? ?? ?//定义可以出售的票源 ?? ?private static int ticket=100; ?? ?//在类的成员位置,创建Lock接口的实现类对象 ?? ?private Lock lock=new ReentrantLock(); ?? ? ?? ?public void run(){ ?? ??? ?while(true){ ?? ??? ??? ?//调用Lock接口方法lock获取锁 ?? ??? ??? ?lock.lock(); ?? ??? ??? ?//对票数判断,大于0,可以出售 ?? ??? ??? ?if(ticket>0){ ?? ??? ??? ??? ?try{ ?? ??? ??? ??? ??? ?Thread.sleep(10); ?? ??? ??? ??? ??? ?System.out.println(Thread.currentThread().getName()+ "出售第"+ticket--); ?? ??? ??? ??? ?}catch(Exception ex){ ?? ??? ??? ??? ??? ? ?? ??? ??? ??? ?}finally{ ?? ??? ??? ??? ??? ?//释放锁,调用Lock接口方法unlock ?? ??? ??? ??? ??? ?lock.unlock(); ?? ??? ??? ??? ?} ?? ??? ??? ?}
?? ??? ?} ?? ?} ?? ?
}
测试类Demo:
/* ?* 多线程并发访问同一个数据资源 ?* 3个线程,对一个票资源,出售 ?*/ public class ThreadDemo { ?? ?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(); ?? ?} }
(编辑:北几岛)
【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!
|