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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

本帖最后由 肚小糖 于 2015-9-16 10:03 编辑

  1. public class Demo28 {

  2.         public static void main(String[] args) {
  3.                 Ticket t = new Ticket(100);
  4.                 for(int i=0; i<5; i++){
  5.                         new Thread(t).start();
  6.                         try{
  7.                                 Thread.sleep(200);
  8.                         }catch(InterruptedException e){
  9.                                 e.printStackTrace();
  10.                         }
  11.                 }
  12.         }
  13. }
  14. class Ticket implements Runnable{
  15.         private int num;
  16.         boolean flag = true;
  17.         public Ticket(int num){
  18.                 this.num = num;
  19.         }
  20.         public int getNum(){
  21.                 return num;
  22.         }
  23.         public void run(){
  24.                 if(flag){
  25.                         while(true){
  26.                                 synchronized(this){
  27.                                         if(num > 0){
  28.                                                 try{
  29.                                                         Thread.sleep(200);
  30.                                                 }catch(InterruptedException e){
  31.                                                         e.printStackTrace();
  32.                                                 }
  33.                                                 System.out.println(Thread.currentThread().getName()+"----"+num--);
  34.                                         }
  35.                                         else{
  36.                                                 break;
  37.                                         }
  38.                                 }
  39.                         }
  40.                 }
  41.         }
  42. }
复制代码
这样对不对?

5 个回复

倒序浏览

回帖奖励 +2

nbbbbbbbbbb
回复 使用道具 举报
用了lock锁 为什么还要用synchronized同步代码块呢?
回复 使用道具 举报
真的不知道你要干什么  代码写的一点意义都没有   
回复 使用道具 举报

  1. //public class Temp {
  2. //        public static void main(String[] args) {
  3. //               
  4. //        }
  5. //}
  6. import java.util.concurrent.locks.Condition;
  7. import java.util.concurrent.locks.Lock;
  8. import java.util.concurrent.locks.ReentrantLock;
  9. public class Temp {

  10.         public static void main(String[] args) {
  11.                 Ticket t = new Ticket(100);
  12.                 for(int i=0; i<5; i++){
  13.                         new Thread(t,"窗口"+i).start();
  14.                         try{
  15.                                 Thread.sleep(200);
  16.                         }catch(InterruptedException e){
  17.                                 e.printStackTrace();
  18.                         }
  19. //                        t.flag = false;//设为flase会导致只有第一个线程能进入if(flag),后面的线程无法运行,如图所示
  20.                 }
  21.         }
  22. }
  23. class Ticket implements Runnable{
  24.         private int num;
  25.         private String id;
  26.         boolean flag = true;
  27.         Lock lock = new ReentrantLock();
  28.         Condition con = lock.newCondition();
  29.         public Ticket(int num){
  30.                 this.num = num;
  31.         }
  32.         public int getNum(){
  33.                 return num;
  34.         }
  35.         public void run(){
  36. //                lock.lock();
  37.                 if(flag){
  38.                         while(true){
  39.                                 synchronized(this){
  40.                                         if(num > 0){
  41.                                                 try{
  42.                                                         Thread.sleep(20);
  43.                                                         System.out.println(Thread.currentThread().getName()+"----"+num--);
  44.                                                 }catch(InterruptedException e){
  45.                                                         e.printStackTrace();
  46.                                                 }
  47. //                                                lock.unlock();
  48.                                                 this.notifyAll();
  49. //                                                break; //break会当前进程
  50.                                         }
  51.                                         else{
  52. //                                                lock.unlock();
  53.                                                 break;
  54.                                         }
  55.                                 }
  56.                         }
  57.                 }
  58.         }
  59. }
复制代码

1.png (2.82 KB, 下载次数: 27)

1.png

2.png (3.46 KB, 下载次数: 23)

2.png
回复 使用道具 举报
几个窗口就是几个啊
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马