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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© fmi110 高级黑马   /  2015-9-30 16:40  /  313 人查看  /  0 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

a
  1. package test;

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


  5. public class Test2 {

  6.         public static void main(String[] args) throws Exception{
  7.                 final P p = new P();
  8.                 new Thread() {
  9.                         public void run() {
  10.                                 for (int i = 1; i < 11; i++) {
  11.                                                         p.show(i);                       
  12.                                 }
  13.                         };
  14.                 }.start();
  15.                 new Thread() {
  16.                         public void run() {
  17.                                 for (int i = 1; i < 11; i++) {
  18.                                                 p.print(i);                       
  19.                                 }
  20.                         };
  21.                 }.start();
  22.         }
  23. }
  24. class P {
  25.         boolean flag = false;
  26.         Lock l = new ReentrantLock();
  27.         Condition con = l.newCondition();
  28.         public void show(int i)  {
  29.                 l.lock();
  30.                 try{
  31.                         while(flag)
  32.                                 try {
  33.                                         con.await();
  34.                                 } catch (InterruptedException e) {
  35.                                         // TODO Auto-generated catch block
  36.                                         e.printStackTrace();
  37.                                 }
  38.                         System.out.println(i + "..." + Thread.currentThread().getName());
  39.                         flag = true;
  40.                 }
  41.                 finally{
  42.                         con.signalAll();
  43.                         l.unlock();
  44.                 }       
  45.         }

  46.         public void print(int i)  {
  47.                 l.lock();
  48.                 try{
  49.                         while(!flag)
  50.                                 try {
  51.                                         con.await();
  52.                                 } catch (InterruptedException e) {
  53.                                         // TODO Auto-generated catch block
  54.                                         e.printStackTrace();
  55.                                 }
  56.                         System.out.println(i + "..." + Thread.currentThread().getName());
  57.                         flag = false;
  58.                 }
  59.                 finally{
  60.                         con.signalAll();
  61.                         l.unlock();
  62.                 }       
  63.         }
  64. }
复制代码


0 个回复

您需要登录后才可以回帖 登录 | 加入黑马