javaSE之线程联合
首先定义 : 一个线程A在占有CPU资源期间 ,可以让其他线程调用join()和本线程联合。
嗯哈,像书本这个列子:
如: B.join();
我们称A在运行期间联合了B, 如果线程A在占有CPU资源期间一旦联合B线程,那么A线程将立刻
中断执行,一直等到它联合的线程B执行完毕,A线程再重新排队等待CPU资源,以便恢复执行,
如果A准备联合的B线程已经结束,那么B.join(),不会产生任何效果。
package dialog_color; public class Example12_8
{
public static void main(String args [])
{
ThreadJoin a = new ThreadJoin();
Thread customer = new Thread(a);
Thread cakeMaker = new Thread(a);
customer.setName("顾客");
cakeMaker.setName("蛋糕");
a.setJoinThread(cakeMaker);
customer.start();
}
}
class ThreadJoin implements Runnable
{
Cake cake;
Thread joinThread;
public void setJoinThread(Thread it)
{
this.joinThread=it;
}
public void run() {
// TODO Auto-generated method stub
if(Thread.currentThread().getName().equals("顾客"))
{
System.out.println(Thread.currentThread().getName()
+"等待"+joinThread.getName()+"制作生日蛋糕");
try {
joinThread.start();
joinThread.join(); } catch (InterruptedException e) {
// TODO Auto-generated catch block
// e.printStackTrace();
}
System.out.println(Thread.currentThread().getName()+"买了"+cake.name+"价钱: "+cake.price);
}
else if(Thread.currentThread()==joinThread)
{
System.out.println(joinThread.getName()+"开始制作生日蛋糕,请等待......");
try {
Thread.sleep(2000);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
cake=new Cake("生日蛋糕",158);
System.out.println(joinThread.getName()+"制作完成!");
}
} class Cake //内部类 相当于一个结构体) (c/c++)
{
int price ;
String name;
Cake(String name ,int price)
{
this.name=name;
this.price=price;
}
}
}
效果图:

code:
package tes;
/*
* 模拟这样一个过程
* 一个老头去买蛋糕,蛋糕需要先做,
* 老头等待做完,然后付款离开。
*
* */
public class Example12_9 { public static void main(String args [])
{
Thread aa,bb;
JoinThread hehe = new JoinThread();
aa = new Thread(hehe);
bb = new Thread(hehe);
aa.setName("老头");
bb.setName("蛋糕师傅");
hehe.setJoinThread(bb);
aa.start();
}
}
class JoinThread implements Runnable
{
Thread myThread;
cake mycake;
public void setJoinThread(Thread name) {
myThread=name;
}
@Override
public void run() {
// TODO Auto-generated method stub
if(Thread.currentThread().getName().equals("老头"))
{
print(Thread.currentThread().getName()+"等待蛋糕师傅制作蛋糕"
+myThread.currentThread().getName()+"开始制作蛋糕.....");
//开始联合同步
myThread.start();
try {
myThread.join();
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
print(myThread.currentThread().getName()+"蛋糕做完..."
+Thread.currentThread().getName()+"买了"+mycake.name
+" 价钱:"+mycake.price);
}
else if(Thread.currentThread()==myThread)
{
print(myThread.currentThread().getName()+
"开始制作蛋糕,wait for minutes !");
try {
Thread.sleep(2500);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
print("蛋糕做完了");
mycake = new cake("蛋糕",12.8);
}
}
private void print(String name){
System.out.println(name);
}
class cake
{
String name;
double price;
cake(String name,double price){
this.name=name;
this.price=price;
}
}
}

javaSE之线程联合的更多相关文章
- JavaSE中线程与并行API框架学习笔记——线程为什么会不安全?
前言:休整一个多月之后,终于开始投简历了.这段时间休息了一阵子,又病了几天,真正用来复习准备的时间其实并不多.说实话,心里不是非常有底气. 这可能是学生时代遗留的思维惯性--总想着做好万全准备才去做事 ...
- java 线程实现、线程暂停和终止 、线程联合join、线程基本信息获取和设置、线程优先级
转载地址:速学堂 https://www.sxt.cn/Java_jQuery_in_action/eleven-inheritthread.html 1. 通过继承Thread类实现多线程 继承Th ...
- JavaSE中线程与并行API框架学习笔记1——线程是什么?
前言:虽然工作了三年,但是几乎没有使用到多线程之类的内容.这其实是工作与学习的矛盾.我们在公司上班,很多时候都只是在处理业务代码,很少接触底层技术. 可是你不可能一辈子都写业务代码,而且跳槽之后新单位 ...
- 09 - JavaSE之线程
线程 线程的基本概念 线程是一个程序里面不同的执行路径. 进程与线程的区别 每个进程都有独立的代码和数据空间(进程上下文),进程间的切换开销大. 线程可以看作轻量级的进程,同一类线程共享代码和数据空间 ...
- JavaSE学习笔记(12)---线程
JavaSE学习笔记(12)---线程 多线程 并发与并行 并发:指两个或多个事件在同一个时间段内发生. 并行:指两个或多个事件在同一时刻发生(同时发生). 在操作系统中,安装了多个程序,并发指的是在 ...
- 联合线程(案例顾客买蛋糕 :使用join()方法)
运行效果图:
- Java 多线程详解(五)------线程的声明周期
Java 多线程详解(一)------概念的引入:http://www.cnblogs.com/ysocean/p/6882988.html Java 多线程详解(二)------如何创建进程和线程: ...
- Java 多线程(三)—— 线程的生命周期及方法
这篇博客介绍线程的生命周期. 线程是一个动态执行的过程,它也有从创建到死亡的过程. 线程的几种状态 在 Thread 类中,有一个枚举内部类: 上面的信息以图片表示如下: 第一张图: 第二张图:把等待 ...
- 计算机网络通信、线程、tcp、udp通信及信号量等读书笔记
一.计算机网络 1.什么是计算机网络:把分布在不同地理位置的计算机与专门的网络设备用通信线路互相连成一个规模大.功能强的系统,从而使众多计算机可以方便地互相传递信息.共享软件.硬件.数据信息等.简单来 ...
随机推荐
- [转][Unreal3教程]引擎使用操作入门教程
前言 如果你想转载这篇文章,请不要把这篇文章的来源去掉:http://blog.sina.com.cn/zjmjeo 一来是对我辛苦写这篇文章肯定,二来我可以有更多机会和你们这些朋友交流 1.打开引擎 ...
- SQL触发器,数据库
触发器类型有两种: 1.AFTER(FOR)触发器 在动作执行之后触发(增删改执行完成后,触发器中的代码再执行),不能为视图指定for触发器,只能为表指定该触发器. 2.instead of触发器 可 ...
- 统计map上的read数量
samtools flagstat /SRA111111/SRR111222/accepted_hits.bam 78406056 + 0 in total (QC-passed reads + QC ...
- pupper基线加固
1. 概述 puppet是一个开源的软件自动化配置和部署工具,它使用简单且功能强大,正得到了越来越多地关注,现在很多大型IT公司均在使用puppet对集群中的软件进行管理和部署,如google利用p ...
- Servlet上下文
Servlet上下文 运行在Java虚拟机的每一个Web应用程序都有一个与之相关的Servlet上下文. Java Servlet API提供了一个ServletContext接口来表示上下文.在这个 ...
- LIST动态表格画线(动态列)
声明:原创作品,转载时请注明文章来自SAP师太技术博客( 博/客/园www.cnblogs.com):www.cnblogs.com/jiangzhengjun,并以超链接形式标明文章原始出处,否则将 ...
- .net 浏览器请求过程(图)
大致: 细节: (信息来源于传智播客教学视频)
- PhpStorm的注册码、Key
下面是PhpStorm的注册码.Key,其license由用户名和License值组成. User name: EMBRACE License key: ===== LICENSE BEGIN === ...
- poj2074Line of Sight(直线相交)
链接 几何细节题. 对于每一个障碍物可以求出它在地产线上的覆盖区间,如下图. 紫色部分即为每个障碍物所覆盖掉的区间,求出所有的,扫描一遍即可. 几个需要注意的地方:直线可能与地产线没有交点,可视区间可 ...
- MVC中Html.Listbox的用法实例
要绑定listbox或dropdownlist前提是:必须是SelectItem类,例如: 因为Html.ListBox第二个绑定数据的参数要得类型为SelectList第一种:因为listbox可以 ...