java 不同线程之间的切换(wait和notify)

来源:互联网 发布:淘宝专业版和智能版 编辑:程序博客网 时间:2024/06/05 08:31
package com.thread;    /**  * 创建两个线程,一个线程循环10次,另一个线程100次,两者交替运行50次  * 即到A线程时,它运行本身循环的10次之后;马上轮到B线程,它则运行本身的100次循环  * 以此轮换切换线程共50次  */  public class ThreadTest {      public static void main(String[] args) {                    final Business business=new Business();                      //子线程          new Thread(new Runnable() {              public void run() {                // 每次执行完都会进行唤醒其他方法执行                  for (int i = 0; i < 50; i++) {                      try {                          business.sub(i);                      } catch (InterruptedException e) {                          // TODO Auto-generated catch block                          e.printStackTrace();                      }                  }              }          }).start();            //----------------------------线程二-------------------------------------------------                    //main方法本身是个线程,即线程二运行代码直接放到main方法中          for (int i = 0; i < 50; i++) {              try {                  business.main(i);              } catch (InterruptedException e) {                  // TODO Auto-generated catch block                  e.printStackTrace();              }          }                }  }    class Business{      private boolean isSub=true;//当前运行的方法是sub()            //线程一      public synchronized void sub(int i) throws InterruptedException {          while (!isSub) {              this.wait();          }          for (int j = 0; j < 10; j++) {              System.out.println("sub thread sequence is "+j+" and loop is "+i);          }          isSub = false;          this.notify();      }            //主线程,即main      public synchronized void main(int i) throws InterruptedException{          while (isSub) {              this.wait();          }          for (int j = 0; j < 100; j++) {              System.out.println("main thread sequence is "+j+" and loop is "+i);          }          isSub = true;          this.notify();      }  }  





0 0
原创粉丝点击