首页 > 代码库 > 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 }
效果图:
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。