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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 825176857 中级黑马   /  2015-7-13 22:41  /  218 人查看  /  0 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文


  1.             @Override
  2.             public void run() {
  3.                while(num1 <100){
  4.                  synchronized (myTwoprintThread) {
  5.                 if (state !=1) {
  6.                     try {
  7.                         myTwoprintThread.wait(10000);
  8.                     } catch (Exception e) {
  9.                         e.printStackTrace();
  10.                     }
  11.                 }
  12.                 for (int i = 0; i <10; i++) {
  13.                     System.out.print(num1+" ");
  14.                     num1+=2;
  15.                 }
  16.                 System.err.println("----------");
  17.                 state=2;
  18.                 myTwoprintThread.notifyAll();
  19.                 }
  20.               }
  21.             }
  22.         }).start();
  23.          
  24.          
  25.         new Thread(new Runnable() {
  26.             
  27.             @Override
  28.             public void run() {
  29.                while (num2 < 100) {
  30.                  synchronized (myTwoprintThread) {
  31.             
  32.                 // TODO Auto-generated method stub
  33.               if(state!=2){
  34.                    try {
  35.                     myTwoprintThread.wait(5000);
  36.                   } catch (Exception e) {
  37.                     e.printStackTrace();
  38.                   }           
  39.               }
  40.               for (int i = 0; i < 10; i++) {
  41.                 System.err.print(num2+"-");
  42.                 num2+=2;
  43.              }
  44.              System.err.println("----------");
  45.              state=1;
  46.              myTwoprintThread.notifyAll();
  47.             }
  48.           }
  49.         }
  50.         }).start();
  51.     }
  52.                   // 两个线程都用t对象作为锁,保证每个交替期间只有一个线程在打印
  53.             
  54.         // 如果state!=1, 说明此时尚未轮到线程1打印, 线程1将调用t的wait()方法, 直到下次被唤醒

  55.          
  56.              // 当state=1时, 轮到线程1打印5次数字
  57.             
  58.            // 线程1打印完成后, 将state赋值为2, 表示接下来将轮到线程2打印   
  59.                  
  60.            // notifyAll()方法唤醒在t上wait的线程2, 同时线程1将退出同步代码块, 释放t锁
  61. }
复制代码

0 个回复

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