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 }

效果图:

javaSE之线程联合,布布扣,bubuko.com

时间: 2024-12-21 19:25:02

javaSE之线程联合的相关文章

JavaSE中线程与并行API框架学习笔记——线程为什么会不安全?

前言:休整一个多月之后,终于开始投简历了.这段时间休息了一阵子,又病了几天,真正用来复习准备的时间其实并不多.说实话,心里不是非常有底气. 这可能是学生时代遗留的思维惯性--总想着做好万全准备才去做事.当然,在学校里考试之前当然要把所有内容学一遍和复习一遍.但是,到了社会里做事,很多时候都是边做边学.应聘如此,工作如此,很多的挑战都是如此.没办法,硬着头皮上吧. 3.5 线程的分组管理 在实际的开发过程当中,可能会有多个线程同时存在,这对批量处理有了需求.这就有点像用迅雷下载电视剧,假设你在同时

JavaSE中线程与并行API框架学习笔记1——线程是什么?

前言:虽然工作了三年,但是几乎没有使用到多线程之类的内容.这其实是工作与学习的矛盾.我们在公司上班,很多时候都只是在处理业务代码,很少接触底层技术. 可是你不可能一辈子都写业务代码,而且跳槽之后新单位很可能有更高的技术要求.除了干巴巴地翻书,我们可以通过两个方式来解决这个问题:一是做业余项目,例如在github上传自己的demo,可以实际使用:二是把自己的学习心得写成博客,跟同行们互相交流. 3.1 线程的初窥门径 我们在之前的文章里提到的程序其实都是单线程程序,也就说启动的程序从main()程

09 - JavaSE之线程

线程 线程的基本概念 线程是一个程序里面不同的执行路径. 进程与线程的区别 每个进程都有独立的代码和数据空间(进程上下文),进程间的切换开销大. 线程可以看作轻量级的进程,同一类线程共享代码和数据空间,每个线程有独立的运行栈和程序计数器(PC),线程的切换开销小. 多进程:在操作系统中能同时运行多个程序. 多线程:在同一应用程序中有多个顺序流同时执行. 线程的创建与启动 Java 的线程是通过 java.lang.Thread 类来实现的. VM 启动时,会有一个由主方法 main 所定义的线程

JAVA线程控制

可以通过线程的方法进行基本的线程控制,除了已知的start.run.sleep方法外还有isAlive.currentThread.interrupt方法. isAlive:该方法用来测试线程是否处于活动状态.线程由start方法启动后,直至被终止之间的任何时刻都处于Alive状态.当处于新建状态和死亡状态时,该方法返回false. currentThread:该方法是Thread类的的类方法,返回正在使用CPU资源的线程. interrupt:当线程处于休眠状态时,一个占有CPU资源的线程可以

Java 多线程详解(五)------线程的声明周期

Java 多线程详解(一)------概念的引入:http://www.cnblogs.com/ysocean/p/6882988.html Java 多线程详解(二)------如何创建进程和线程:http://www.cnblogs.com/ysocean/p/6883491.html Java 多线程详解(三)------线程的同步:http://www.cnblogs.com/ysocean/p/6883729.html Java 多线程详解(四)------生产者和消费者:http:/

线程的生命周期(五)

这篇博客介绍线程的生命周期. 线程是一个动态执行的过程,它也有从创建到死亡的过程. 在 Thread 类中,有一个枚举内部类: 上面的信息以图片表示如下: 第一张图: 第二张图:把等待.计时等待.阻塞看成阻塞一个状态了 1.新建状态(new):使用 new 创建一个线程,仅仅只是在堆中分配了内存空间 新建状态下,线程还没有调用 start()方法启动,只是存在一个线程对象而已 Thread t = new Thread();//这就是t线程的新建状态 2.可运行状态(runnable):新建状态

11.3-全栈Java笔记:线程的生命周期

一个线程对象在它的生命周期内,需要经历5个状态. 新生状态(New) 用new关键字建立一个线程对象后,该线程对象就处于新生状态.处于新生状态的线程有自己的内存空间,通过调用start方法进入就绪状态. 就绪状态(Runnable) 处于就绪状态的线程已经具备了运行条件,但还没有分配到CPU,处于 "线程就绪队列",等待系统为其分配CPU. 就绪状态并不是执行状态,当系统选定一个等待执行的Thread对象后,它就会进入执行状态. 一旦获得CPU,线程就进入运行状态并自动调用自己的run

五、线程的生命周期

线程是一个动态执行的过程,它也有从创建到死亡的过程. 在 Thread 类中,有一个枚举内部类: 上面的信息以图片表示如下: 第一张图: 第二张图:把等待.计时等待.阻塞看成阻塞一个状态了 1.新建状态(new):使用 new 创建一个线程,仅仅只是在堆中分配了内存空间 新建状态下,线程还没有调用 start()方法启动,只是存在一个线程对象而已 Thread t = new Thread();//这就是t线程的新建状态 2.可运行状态(runnable):新建状态调用 start() 方法,进

有关JAVA多线程的理解

不同于c++等语言的调用操作系统的线程调控机制来实现多线程,java语言内置了多线程的api包,因此可以更加方便的使用多线程技术.(1)线程的问题.进程是程序的一次动态执行过程,它对应了从代码加载.执行至执行完毕的一个完整过程,这个过程也是进程本身从产生.发展至消亡的过程.线程是比进程更小的单位,一个进程执行过程中可以产生多个线程,每个线程有自身的产生.存在和消亡的过程,也是一个动态的概念.每个进程都有一段专用的内存区域,而线程间可以共享相同的内存区域(包括代码和数据),并利用这些共享单元来实现