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 Runnable 17 { 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 block 36 // 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 block 47 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 }
效果图:
郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。