首页 > 其他 > 详细

LockDemo

时间:2014-02-04 23:25:31      阅读:336      评论:0      收藏:0      [点我收藏+]
bubuko.com,布布扣
  1 package cn.sice;
  2 
  3 import java.util.ArrayList;
  4 import java.util.Date;
  5 import java.util.concurrent.locks.Condition;
  6 import java.util.concurrent.locks.Lock;
  7 import java.util.concurrent.locks.ReentrantLock;
  8 
  9 public class LockDemo
 10 {
 11 
 12     public static void main(String[] args)
 13     {
 14         Res r = new Res();
 15         In in = new In(r);
 16         Out out = new Out(r);
 17         new Thread(in).start();
 18         new Thread(out).start();
 19     }
 20 
 21 }
 22 
 23 class Res
 24 {
 25     ArrayList<String> arrList = new ArrayList();
 26     Lock lock = new ReentrantLock();
 27     Condition conSet = lock.newCondition();
 28     Condition conGet = lock.newCondition();
 29     boolean flag = false;
 30 
 31     public void set()
 32     {
 33         lock.lock();
 34         try
 35         {
 36             while (flag)
 37                 conSet.await();
 38 
 39             arrList.add(new Date().toString());
 40             System.out.println("SET----" + arrList.size() + "-- "
 41                     + arrList.get(arrList.size() - 1) + "  ***  "
 42                     + Thread.currentThread().getName());
 43             flag = true;
 44             conGet.signal();
 45 
 46         } catch (InterruptedException e)
 47         {
 48             e.printStackTrace();
 49         } finally
 50         {
 51             lock.unlock();
 52         }
 53 
 54     }
 55 
 56     public void get()
 57     {
 58         lock.lock();
 59         try
 60         {
 61             while (!flag)
 62                 conGet.await();
 63             System.out.println("GET----" + arrList.size() + "-----"
 64                     + arrList.get(0) + "  ***  "
 65                     + Thread.currentThread().getName());
 66             arrList.remove(0);
 67             flag = false;
 68             conSet.signal();
 69         } catch (InterruptedException e)
 70         {
 71             e.printStackTrace();
 72         } finally
 73         {
 74             lock.unlock();
 75         }
 76     }
 77 }
 78 
 79 class In implements Runnable
 80 {
 81     public void run()
 82     {
 83         while (true)
 84         {
 85             r.set();
 86         }
 87     }
 88 
 89     private Res r;
 90 
 91     public In(Res r)
 92     {
 93         this.r = r;
 94     }
 95 }
 96 
 97 class Out implements Runnable
 98 {
 99     private Res r;
100 
101     public Out(Res r)
102     {
103         this.r = r;
104     }
105 
106     public void run()
107     {
108         while (true)
109         {
110             r.get();
111         }
112     }
113 }
bubuko.com,布布扣

LockDemo

原文:http://www.cnblogs.com/linson0116/p/3537875.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!