子线程循环3次,接着主线程循环6,接着又回到子线程循环3次,接着再回到主线程又循环6,如此循环10次.

package cglib;java

import java.util.concurrent.locks.Lock;
import java.util.concurrent.locks.ReentrantLock;ide

public class jiekou{
    //private int j;
    //private Lock lock=new ReentrantLock();
    public static void main(String args[]){
         System.out.println("线程:"+Thread.currentThread().getName());
         jiekou jiekou =new jiekou();
         jiekou.add();
         System.out.println("线程哈:"+Thread.currentThread().getName());
    }
        public  void add(){
            final Business business =new Business();
            new Thread(new Runnable(){this

                @Override
                public void run() {
                    // TODO Auto-generated method stub
                    for(int i=0;i<10;i++){
                        business.SubThread(i);
                        
                    }
                }},"SubThread").start();
            
            new Thread(new Runnable(){  
                public void run(){  
                    for(int i=1;i<=10;i++){  
                        business.MainThread(i);  
                    }  
                }  
            },"MainThread").start();
            }
        }
        
 class Business{
            boolean bShouldSub =true;//这里至关于定义了控制该谁执行的一个信号灯,true 时主进程等待,false时子进程等待
        
            public synchronized void MainThread(int i)
            {
            if(bShouldSub){
                try {
                    System.out.println("主线程wait……");
                    this.wait();
                } catch(InterruptedException e) {
                    // TODO Auto-generatedcatch block
                    e.printStackTrace();
                }
            }
            System.out.println("主线程Start……");
            for(int j=0;j<6;j++)
            {
            System.out.println(Thread.currentThread().getName()+ ":i=" + i +",j=" + j);
            }
            
            bShouldSub =true;//子线程运行完毕  
            this.notify();//唤醒其余线程,即主线程  
            }
            
        
        
        public synchronized void SubThread(int i)
        {
        if(!bShouldSub){//若是bShouldSub为false  子进程就释放同步锁
            try {
                System.out.println("子线程wait……");
                this.wait();
            } catch (InterruptedException e) {
                // TODO Auto-generatedcatch block
                e.printStackTrace();
            }
        }
        System.out.println("子线程Start……");
        for(int j=0;j<3;j++)
        {
        System.out.println(Thread.currentThread().getName()+ ":i=" + i +",j=" + j);
        }
        bShouldSub =false;//主线程调用完毕  
        this.notify();//唤醒子线程  
        }
    }线程

 

 

输出:进程

线程:main
子线程Start……
SubThread:i=0,j=0
SubThread:i=0,j=1
SubThread:i=0,j=2
子线程wait……
线程哈:main
主线程Start……
MainThread:i=1,j=0
MainThread:i=1,j=1
MainThread:i=1,j=2
MainThread:i=1,j=3
MainThread:i=1,j=4
MainThread:i=1,j=5
主线程wait……
子线程Start……
SubThread:i=1,j=0
SubThread:i=1,j=1
SubThread:i=1,j=2
子线程wait……
主线程Start……
MainThread:i=2,j=0
MainThread:i=2,j=1
MainThread:i=2,j=2
MainThread:i=2,j=3
MainThread:i=2,j=4
MainThread:i=2,j=5
主线程wait……
子线程Start……
SubThread:i=2,j=0
SubThread:i=2,j=1
SubThread:i=2,j=2
主线程Start……
MainThread:i=3,j=0
MainThread:i=3,j=1
MainThread:i=3,j=2
MainThread:i=3,j=3
MainThread:i=3,j=4
MainThread:i=3,j=5
主线程wait……
子线程Start……
SubThread:i=3,j=0
SubThread:i=3,j=1
SubThread:i=3,j=2
子线程wait……
主线程Start……
MainThread:i=4,j=0
MainThread:i=4,j=1
MainThread:i=4,j=2
MainThread:i=4,j=3
MainThread:i=4,j=4
MainThread:i=4,j=5
主线程wait……
子线程Start……
SubThread:i=4,j=0
SubThread:i=4,j=1
SubThread:i=4,j=2
子线程wait……
主线程Start……
MainThread:i=5,j=0
MainThread:i=5,j=1
MainThread:i=5,j=2
MainThread:i=5,j=3
MainThread:i=5,j=4
MainThread:i=5,j=5
主线程wait……
子线程Start……
SubThread:i=5,j=0
SubThread:i=5,j=1
SubThread:i=5,j=2
子线程wait……
主线程Start……
MainThread:i=6,j=0
MainThread:i=6,j=1
MainThread:i=6,j=2
MainThread:i=6,j=3
MainThread:i=6,j=4
MainThread:i=6,j=5
主线程wait……
子线程Start……
SubThread:i=6,j=0
SubThread:i=6,j=1
SubThread:i=6,j=2
子线程wait……
主线程Start……
MainThread:i=7,j=0
MainThread:i=7,j=1
MainThread:i=7,j=2
MainThread:i=7,j=3
MainThread:i=7,j=4
MainThread:i=7,j=5
主线程wait……
子线程Start……
SubThread:i=7,j=0
SubThread:i=7,j=1
SubThread:i=7,j=2
子线程wait……
主线程Start……
MainThread:i=8,j=0
MainThread:i=8,j=1
MainThread:i=8,j=2
MainThread:i=8,j=3
MainThread:i=8,j=4
MainThread:i=8,j=5
主线程wait……
子线程Start……
SubThread:i=8,j=0
SubThread:i=8,j=1
SubThread:i=8,j=2
子线程wait……
主线程Start……
MainThread:i=9,j=0
MainThread:i=9,j=1
MainThread:i=9,j=2
MainThread:i=9,j=3
MainThread:i=9,j=4
MainThread:i=9,j=5
主线程wait……
子线程Start……
SubThread:i=9,j=0
SubThread:i=9,j=1
SubThread:i=9,j=2
主线程Start……
MainThread:i=10,j=0
MainThread:i=10,j=1
MainThread:i=10,j=2
MainThread:i=10,j=3
MainThread:i=10,j=4
MainThread:i=10,j=5get

 

package cglib;同步


import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
import java.util.concurrent.locks.Condition;
import java.util.concurrent.locks.Lock;
import java.util.concurrent.locks.ReentrantLock;it

public class jiekou{
    private static Lock lock = new ReentrantLock();  
    private static Condition subThreadCondition = lock.newCondition();  
    private static boolean bBhouldSubThread = false;  
    public static void main(String [] args)  
    {  
        ExecutorService threadPool = Executors.newFixedThreadPool(3);  
        threadPool.execute(new Runnable(){  
            public void run()  
            {  
                for(int i=0;i<10;i++)  
                {  
                    lock.lock();                      
                    try  
                    {                     
                        if(!bBhouldSubThread){
                            System.out.println("子线程等待");
                            subThreadCondition.await();
                        }
                        System.out.println("子线程开始");
                        for(int k=0;k<3;k++)  
                        {   
                            
                            System.out.println(Thread.currentThread().getName() + ",k=" + k+ ",i=" + i);  
                        }  
                        bBhouldSubThread = false;  
                        subThreadCondition.signal();  
                    }catch(Exception e)  
                    {                         
                    }  
                    finally  
                    {  
                        lock.unlock();  
                    }  
                }             
            }  
              
        });  
        threadPool.shutdown();
        
        for(int i=0;i<10;i++)  
        {  
                lock.lock();                      
                try  
                {     
                    if(bBhouldSubThread) {
                        System.out.println("主线程等待");
                        subThreadCondition.await();
                    }
                    System.out.println("主线程开始");                                   
                    for(int j=0;j<6;j++)  
                    {  
                        
                        System.out.println(Thread.currentThread().getName() + ",j=" + j+",i=" + i);  
                    }  
                    bBhouldSubThread = true;  
                    subThreadCondition.signal();                      
                }catch(Exception e)  
                {                         
                }  
                finally  
                {  
                    lock.unlock();  
                }                     
        }  
    }
        }
    
    
        io

    输出:class

主线程开始 main,j=0,i=0 main,j=1,i=0 main,j=2,i=0 main,j=3,i=0 main,j=4,i=0 main,j=5,i=0 主线程等待 子线程开始 pool-1-thread-1,k=0,i=0 pool-1-thread-1,k=1,i=0 pool-1-thread-1,k=2,i=0 子线程等待 主线程开始 main,j=0,i=1 main,j=1,i=1 main,j=2,i=1 main,j=3,i=1 main,j=4,i=1 main,j=5,i=1 主线程等待 子线程开始 pool-1-thread-1,k=0,i=1 pool-1-thread-1,k=1,i=1 pool-1-thread-1,k=2,i=1 子线程等待 主线程开始 main,j=0,i=2 main,j=1,i=2 main,j=2,i=2 main,j=3,i=2 main,j=4,i=2 main,j=5,i=2 主线程等待 子线程开始 pool-1-thread-1,k=0,i=2 pool-1-thread-1,k=1,i=2 pool-1-thread-1,k=2,i=2 子线程等待 主线程开始 main,j=0,i=3 main,j=1,i=3 main,j=2,i=3 main,j=3,i=3 main,j=4,i=3 main,j=5,i=3 主线程等待 子线程开始 pool-1-thread-1,k=0,i=3 pool-1-thread-1,k=1,i=3 pool-1-thread-1,k=2,i=3 子线程等待 主线程开始 main,j=0,i=4 main,j=1,i=4 main,j=2,i=4 main,j=3,i=4 main,j=4,i=4 main,j=5,i=4 主线程等待 子线程开始 pool-1-thread-1,k=0,i=4 pool-1-thread-1,k=1,i=4 pool-1-thread-1,k=2,i=4 子线程等待 主线程开始 main,j=0,i=5 main,j=1,i=5 main,j=2,i=5 main,j=3,i=5 main,j=4,i=5 main,j=5,i=5 主线程等待 子线程开始 pool-1-thread-1,k=0,i=5 pool-1-thread-1,k=1,i=5 pool-1-thread-1,k=2,i=5 子线程等待 主线程开始 main,j=0,i=6 main,j=1,i=6 main,j=2,i=6 main,j=3,i=6 main,j=4,i=6 main,j=5,i=6 主线程等待 子线程开始 pool-1-thread-1,k=0,i=6 pool-1-thread-1,k=1,i=6 pool-1-thread-1,k=2,i=6 子线程等待 主线程开始 main,j=0,i=7 main,j=1,i=7 main,j=2,i=7 main,j=3,i=7 main,j=4,i=7 main,j=5,i=7 主线程等待 子线程开始 pool-1-thread-1,k=0,i=7 pool-1-thread-1,k=1,i=7 pool-1-thread-1,k=2,i=7 子线程等待 主线程开始 main,j=0,i=8 main,j=1,i=8 main,j=2,i=8 main,j=3,i=8 main,j=4,i=8 main,j=5,i=8 主线程等待 子线程开始 pool-1-thread-1,k=0,i=8 pool-1-thread-1,k=1,i=8 pool-1-thread-1,k=2,i=8 子线程等待 主线程开始 main,j=0,i=9 main,j=1,i=9 main,j=2,i=9 main,j=3,i=9 main,j=4,i=9 main,j=5,i=9 子线程开始 pool-1-thread-1,k=0,i=9 pool-1-thread-1,k=1,i=9 pool-1-thread-1,k=2,i=9

相关文章
相关标签/搜索