首页 > 代码库 > javaSE之线程联合

javaSE之线程联合

        首先定义 : 一个线程A在占有CPU资源期间 ,可以让其他线程调用join()和本线程联合。

   嗯哈,像书本这个列子:

           如: B.join();

       我们称A在运行期间联合了B, 如果线程A在占有CPU资源期间一旦联合B线程,那么A线程将立刻

       中断执行,一直等到它联合的线程B执行完毕,A线程再重新排队等待CPU资源,以便恢复执行,

      如果A准备联合的B线程已经结束,那么B.join(),不会产生任何效果。

    

 1 package dialog_color; 2  3 public class Example12_8  4 { 5     public static void main(String args []) 6     { 7        ThreadJoin a = new ThreadJoin(); 8        Thread customer = new Thread(a); 9        Thread cakeMaker = new Thread(a);10        customer.setName("顾客");11        cakeMaker.setName("蛋糕");12        a.setJoinThread(cakeMaker);13        customer.start();14     }15 }16 class ThreadJoin implements Runnable17 {18     Cake cake;19     Thread joinThread;20     public void setJoinThread(Thread it)21     {22       this.joinThread=it;23     }24     public void run() {25         // TODO Auto-generated method stub        26       if(Thread.currentThread().getName().equals("顾客"))27       {28           System.out.println(Thread.currentThread().getName()29                   +"等待"+joinThread.getName()+"制作生日蛋糕"); 30           try { 31               joinThread.start();32                joinThread.join();33             34         } catch (InterruptedException e) {35             // TODO Auto-generated catch block36         //    e.printStackTrace();37         }38         System.out.println(Thread.currentThread().getName()+"买了"+cake.name+"价钱: "+cake.price);39       }40       else if(Thread.currentThread()==joinThread)41       {42         System.out.println(joinThread.getName()+"开始制作生日蛋糕,请等待......");43         try {44             Thread.sleep(2000);45         } catch (InterruptedException e) {46             // TODO Auto-generated catch block47             e.printStackTrace();48         }49         cake=new Cake("生日蛋糕",158);50         System.out.println(joinThread.getName()+"制作完成!");51       }52     }53     54   class Cake    //内部类  相当于一个结构体) (c/c++)55   {56       int price ;57       String name;58       Cake(String name ,int price)59       {60         this.name=name;61         this.price=price;62       }63   }    64 }

 效果图: