`

线程联合join

阅读更多
/**
 * ThreadJoin.java
 * cn.com.songjy.test.socket.thread
 * Function: TODO 
 *
 *   version    date      author
 * ──────────────────────────────────
 *   	1.0	 2013-8-16    songjy
 *
 * Copyright (c) 2013, TNT All Rights Reserved.
*/

package cn.com.songjy.test.socket.thread;

import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;

/**
 * ClassName:ThreadJoin 
 * 
 * 线程联合
 * 
 * 一个线程A在占有CPU资源期间,可以让其他线程调用join()和本线程联合,如
 * B.join();
 * 称线程A在运行期间联合了线程B。如果线程A在占有CPU资源期间一旦联合线程B,
 * 那么线程A将立刻中断执行,一直等到它联合的线程B执行完毕,线程A再重新排队等待CPU资源,
 * 以便恢复执行。如果线程A准备联合的线程B已经结束,那么B.join()不会产生任何效果。
 * 
 * 顾客只有等待电脑制造厂生产出电脑才能购买
 * @author   songjy
 * @version  1.0
 * @since    v1.0
 * @Date	 2013-8-16	下午3:18:17
 */

public class ThreadJoin implements Runnable {
	
	public static void main(String[] args) {
		ThreadJoin j = new ThreadJoin();
		j.customer.start();
		j.maker.start();
	}
	
	private static Log log = LogFactory.getLog(ThreadJoin.class);

	Computer c;
	
	Thread maker;
	Thread customer;
	
	ThreadJoin(){
		maker = new Thread(this);
		customer = new Thread(this);
		
		maker.setName("电脑制造厂");
		customer.setName("顾客");
		
		
	}
	
	@Override
	public void run() {
		if(Thread.currentThread() == customer) {
			log.info(customer.getName() + "等" + maker.getName() + "生产电脑");
			try {
				maker.join();//线程customer开始等待maker结束
				log.info(customer.getName() + "买了一台电脑:"+ c.name +",价格:" +c.price);
			} catch (InterruptedException e) {
				log.error(e.getMessage(), e);
			}
		} else if (Thread.currentThread() == maker) {
			log.info(maker.getName() + "开始生产电脑,请等待。。。。。。");
			try {
				Thread.sleep(2 * 1000l);
				//maker.sleep(2 * 1000l);//也可,简单明了
			} catch (InterruptedException e) {
				log.error(e.getMessage(), e);
			}
			
			c = new Computer("联想一体机", 4500.0f);
			
			log.info(maker.getName() + "生产完毕!");
		}
	}

	class Computer {
		String name;
		float price;
		Computer(String name, float price){
			this.name = name;
			this.price = price;
		}
	}
}

分享到:
评论

相关推荐

    mysql数据库my.cnf配置文件

    join_buffer_size = 8388608 # 联合查询操作所能使用的缓冲区大小,和sort_buffer_size一样,该参数对应的分配内存也是每连接独享 thread_cache_size = 8 # 这个值(默认8)表示可以重新利用保存在缓存中线程的数量...

    Visual C++程序开发范例宝典(光盘) 第四部分

    实例270 对联合查询后的结果进行排序 9.13 内连接查询 实例271 简单内连接查询 实例272 复杂内连接查询 实例273 使用内连接选择一个表与另一个表中行相关的所有行 9.14 外连接查询 实例274 LEFT OUTER JOIN...

    Visual C++程序开发范例宝典(光盘) 第八部分

    实例270 对联合查询后的结果进行排序 9.13 内连接查询 实例271 简单内连接查询 实例272 复杂内连接查询 实例273 使用内连接选择一个表与另一个表中行相关的所有行 9.14 外连接查询 实例274 LEFT OUTER JOIN...

    Mycat数据库中间件 v1.13

    更新日志修复所有下推中带有错误联合的连接 修复生成的sql带有类型转换导致mysql运算不正确 修复黑客路由器损坏 修复黑客路由器响应int类型可能超出数字范围Mycat的目标是以低成本将当前的独立数据库和应用程序...

    Mycat2数据库中间件-其他

    MyCAT是一种开源软件,是面向企业的“大型... Mycat2 更新日志:v1.13修复所有下推中带有错误联合的连接修复生成的sql带有类型转换导致mysql运算不正确修复黑客路由器损坏修复黑客路由器响应int类型可能超出数字范围

    MySQL命令大全

    PROCESS: 显示或杀死属于其它用户的服务线程。 RELOAD: 重载访问控制表,刷新日志等。 SHUTDOWN: 关闭MySQL服务。 数据库/数据表/数据列权限: Alter: 修改已存在的数据表(例如增加/删除列)和索引。 Create: ...

    MySQL5.1参考手册官方简体中文版

    7.2.11. MySQL如何简化外部联合 7.2.12. MySQL如何优化ORDER BY 7.2.13. MySQL如何优化GROUP BY 7.2.14. MySQL如何优化LIMIT 7.2.15. 如何避免表扫描 7.2.16. INSERT语句的速度 7.2.17. UPDATE语句的速度 7.2.18. ...

    NHibernate参考文档 2.0.0 chm

    10.2. 线程与连接 10.3. 关注对象标识(Considering object identity) 10.4. 乐观并发控制(Optimistic concurrency control) 10.4.1. 长会话自动版本化 10.4.2. 多事务自动版本化 10.4.3. 定制自动版本化行为 ...

    MySQL 5.1参考手册

    7.2.11. MySQL如何简化外部联合 7.2.12. MySQL如何优化ORDER BY 7.2.13. MySQL如何优化GROUP BY 7.2.14. MySQL如何优化LIMIT 7.2.15. 如何避免表扫描 7.2.16. INSERT语句的速度 7.2.17. UPDATE语句的速度 ...

    NHibernate中文帮组文档(2008.11月更新)

    10.2. 线程与连接 10.3. 关注对象标识(Considering object identity) 10.4. 乐观并发控制(Optimistic concurrency control) 10.4.1. 长会话自动版本化 10.4.2. 多事务自动版本化 10.4.3. 定制自动版本化行为 ...

    MySQL 5.1参考手册 (中文版)

    7.2.11. MySQL如何简化外部联合 7.2.12. MySQL如何优化ORDER BY 7.2.13. MySQL如何优化GROUP BY 7.2.14. MySQL如何优化LIMIT 7.2.15. 如何避免表扫描 7.2.16. INSERT语句的速度 7.2.17. UPDATE语句的速度 7.2.18. ...

    mysql官方中文参考手册

    7.2.11. MySQL如何简化外部联合 7.2.12. MySQL如何优化ORDER BY 7.2.13. MySQL如何优化GROUP BY 7.2.14. MySQL如何优化LIMIT 7.2.15. 如何避免表扫描 7.2.16. INSERT语句的速度 7.2.17. UPDATE语句的速度 7.2.18. ...

    MYSQL中文手册

    7.2.11. MySQL如何简化外部联合 7.2.12. MySQL如何优化ORDER BY 7.2.13. MySQL如何优化GROUP BY 7.2.14. MySQL如何优化LIMIT 7.2.15. 如何避免表扫描 7.2.16. INSERT语句的速度 7.2.17. UPDATE语句的速度 ...

    MySQL 5.1参考手册中文版

    7.2.11. MySQL如何简化外部联合 7.2.12. MySQL如何优化ORDER BY 7.2.13. MySQL如何优化GROUP BY 7.2.14. MySQL如何优化LIMIT 7.2.15. 如何避免表扫描 7.2.16. INSERT语句的速度 7.2.17. UPDATE语句的速度 ...

    MYSQL常用命令大全

    PROCESS: 显示或杀死属于其它用户的服务线程。 RELOAD: 重载访问控制表,刷新日志等。 SHUTDOWN: 关闭MySQL服务。 数据库/数据表/数据列权限: Alter: 修改已存在的数据表(例如增加/删除列)和索引。 Create: 建立新...

    MySql 5.1 参考手册.chm

    7.2.11. MySQL如何简化外部联合 7.2.12. MySQL如何优化ORDER BY 7.2.13. MySQL如何优化GROUP BY 7.2.14. MySQL如何优化LIMIT 7.2.15. 如何避免表扫描 7.2.16. INSERT语句的速度 7.2.17. UPDATE语句的速度 7.2.18. ...

    MySQL 5.1中文手冊

    7.2.11. MySQL如何简化外部联合 7.2.12. MySQL如何优化ORDER BY 7.2.13. MySQL如何优化GROUP BY 7.2.14. MySQL如何优化LIMIT 7.2.15. 如何避免表扫描 7.2.16. INSERT语句的速度 7.2.17. UPDATE语句的速度 7.2.18. ...

    hibernate 教程

    外连接抓取(Outer Join Fetching ) 3.5.3. 二进制流 3.5.4. 自定义CacheProvider 3.5.5. 事务策略配置 3.5.6. 绑定SessionFactory到JNDI 3.5.7. 查询语言替换 3.6. Logging 3.7. 实现...

Global site tag (gtag.js) - Google Analytics