当前位置:编程学习 > C/C++ >>

两个线程循环切换

print?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(); 
    } 

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

补充:软件开发 , C++ ,
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,