A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 三土 中级黑马   /  2015-7-25 20:27  /  400 人查看  /  2 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

  1. package com.itheima1;

  2. import java.util.concurrent.locks.Condition;
  3. import java.util.concurrent.locks.Lock;
  4. import java.util.concurrent.locks.ReentrantLock;

  5. public class tongxin {

  6.         public static void main(String[] args) {

  7.                 Resouce r = new Resouce();
  8.                 new Thread(new Producer(r)).start();
  9.                 new Thread(new Producer(r)).start();
  10.                 new Thread(new Consumer(r)).start();
  11.                 new Thread(new Consumer(r)).start();
  12.         }

  13. }

  14. class Resouce {

  15.         private String name;
  16.         private int count = 1;
  17.         private boolean flag = false;
  18.         private Lock lock = new ReentrantLock();

  19.         private Condition condition_input =   lock.newCondition();

  20.         private Condition condition_output = lock.newCondition();


  21.         public void set(String name) {
  22.                 lock.lock();

  23.                 try {
  24.                         while (flag) {
  25.                                 condition_input.await();
  26.                         }
  27.                         this.name = name + count++;
  28.                         System.out.println(Thread.currentThread().getName()
  29.                                         + "...生产者......" + this.name);
  30.                         flag = true;
  31.                         condition_output.signal();

  32.                 } catch (InterruptedException e) {
  33.                         // TODO Auto-generated catch block
  34.                         e.printStackTrace();
  35.                 } finally {
  36.                         lock.unlock();
  37.                 }

  38.         }

  39.         public synchronized void out() {
  40.                 lock.lock();

  41.                 try {
  42.                         while (!flag) {
  43.                                 condition_output.await();
  44.                         }
  45.                         System.out.println(Thread.currentThread().getName() + "+消费者+"
  46.                                         + this.name);
  47.                         flag = false;
  48.                         condition_input.signal();
  49.                 } catch (Exception e) {
  50.                         // throw new RuntimeException();
  51.                 } finally {
  52.                         lock.unlock();
  53.                 }

  54.         }
  55. }

  56. class Producer implements Runnable {
  57.         private Resouce r;

  58.         Producer(Resouce r) {
  59.                 this.r = r;
  60.         }

  61.         public void run() {
  62.                 while (true) {
  63.                         r.set("汉堡");
  64.                 }
  65.         }
  66. }

  67. class Consumer implements Runnable {
  68.         private Resouce r;

  69.         Consumer(Resouce r) {
  70.                 this.r = r;
  71.         }

  72.         public void run() {
  73.                 while (true) {
  74.                         r.out();
  75.                 }
  76.         }
  77. }
复制代码




2 个回复

倒序浏览
入学十二天了吗,感觉怎么样啊
回复 使用道具 举报
大鹏37 发表于 2015-7-25 20:43
入学十二天了吗,感觉怎么样啊

在家里看视频哦! 复习一遍
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马