java线程同步 以及wait 和notify用法

package test;

public class ThreadTest2 extends Thread {     
      private int threadNo;
      private String lock;
      
      public ThreadTest2(int threadNo, String lock) {     
      this.threadNo = threadNo;     
          this.lock = lock;   
          } 
      
        public void run() {       
             synchronized (lock) {//线程同步  同步锁是lock  如果不同步 将synchronized  去掉
                  for (int i = 0; i < 5; i++) {
                      if(i==2){
                          try {
                            lock.wait();//当循环i=2时 将线程暂停并放入线程池
                        } catch (InterruptedException e) {
                            // TODO 自动生成的 catch 块
                            e.printStackTrace();
                        }
                      }
                   System.out.println("No." + threadNo + ":" + i);     
                }      
             }       
             } 
     public static void main(String[] args) throws Exception {     
        String lock = new String("lock");new ThreadTest2(1, lock).start(); 
       new ThreadTest2(2, lock).start();
       new ThreadTest2(3, lock).start();
       new ThreadTest2(4, lock).start();
       new ThreadTest2(5, lock).start();
       new ThreadTest2(6, lock).start();
       new ThreadTest2(7, lock).start();
       new ThreadTest2(8, lock).start();
       new ThreadTest2(9, lock).start();
       new ThreadTest2(10, lock).start();
       Thread t2 = new Thread() {
           public void run()
           {
               synchronized (lock) {
                   System.out.println("T2 start!");
                   lock.notify();//唤醒lock锁被放入线程池的随机一个线程
                   System.out.println("T2 end!");
               }
           }
       };
       t2.start();
      }
     }

 

posted on 2016-12-14 15:49  取个名字之麻烦  阅读(210)  评论(0)    收藏  举报