`

传统线程同步通信技术

阅读更多
package cn.com.songjy.test.socket.thread;

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

/**
 * 
 * ClassName:TraditionalThreadCommunication
 * 子线程循环10次,接着主线程循环100次,接着又回到子线程循环10次,接着再回到主线程又循环100次,如此循环50次
 * 
 * @author songjy
 * @version 1.0
 * @since v1.0
 * @Date 2013-8-16 下午2:22:53
 */
public class TraditionalThreadCommunication {

	public static void main(String[] args) {

		final Businese businese = new Businese();

		new Thread(new Runnable() {
			public void run() {
				for (int j = 0; j < 50; j++) {
					businese.sub(j);
				}
			}
		}).start();

		for (int j = 0; j < 50; j++) {
			businese.main(j);
		}
	}

}

/* synchronized(锁)一般是放在需要访问的资源上的 */
class Businese {

	private static Log log = LogFactory.getLog(Businese.class);
	private boolean sub = true;

	public synchronized void sub(int j) {
		/* 这里用while不用if是因为有可能出现假唤醒的情况 */
		while (!sub) {// 还没有轮到我(sub),继续等待(睡觉)
			try {
				wait();
			} catch (InterruptedException e) {
				log.error(e.getMessage(), e);
			}
		}
		for (int i = 0; i < 10; i++) {
			log.info("sup thread sequence of" + i + "loop of " + j);
		}

		sub = false;// 执行完毕,变更状态
		notify();// 本次执行完毕,唤醒其他线程(main)
	}

	public synchronized void main(int j) {
		/* 这里用while不用if是因为有可能出现假唤醒的情况 */
		while (sub) {// 还没有轮到我(main),继续等待(睡觉)
			try {
				wait();
			} catch (InterruptedException e) {
				log.error(e.getMessage(), e);
			}
		}
		for (int i = 0; i < 100; i++) {
			log.info("main thread sequence of" + i + "loop of " + j);
		}
		sub = true;// 执行完毕,变更状态
		notify();// 本次执行完毕,唤醒其他线程(sub)
	}
}


备注:wait()、notify()和notifyAll()都是Object类中的final方法,被所有的类继承、且不允许重写的方法

引自:http://down.51cto.com/data/443411
分享到:
评论

相关推荐

    传智播客_张孝祥_传统线程同步通信技术

    传智播客_张孝祥_传统线程同步通信技术,看了一下,完全可以学习学习

    传统线程同步通信技术二

    传统线程同步通信技术二传统线程同步通信技术二

    传统线程同步通信技术一

    传统线程同步通信技术一传统线程同步通信技术一

    Java多线程与并发库高级应用视频教程22集

    资源名称:Java多线程与并发库高级应用视频教程22集资源目录:【】01传统线程技术回顾【】02传统定时器技术回顾【】03传统线程互斥技术【】04传统线程同步通信技术【】04传统线程同步通信技术_分割纪录【】05线程...

    Java并发之传统线程同步通信技术代码详解

    主要介绍了Java并发之传统线程同步通信技术代码详解,分享了相关代码示例,小编觉得还是挺不错的,具有一定借鉴价值,需要的朋友可以参考下

    多线程与串行通信 pdf

    Windows是一个多任务操作系统。传统的Windows 3.x只能依靠应用程序之间的协同来实现协同式多任务,而Windows 95/NT实行的是抢先...在这一讲的最后将通过一个简单的串行通信程序,向读者演示多线程和重叠I/O的编程技术。

    《Java编程技巧典型案例解析》随书光盘

    实例13 基于Java语言的多线程同步机制 实例14 Java程序中的多线程实现 实例15 利用Java的多线程技术实现并行多任务的管理 实例16 在Win32系统中引导Java程序 实例17 利用Java实现一个非线性规划问题 实例...

    UNIX 高级教程系统技术内幕

    7.2 传统UNIX 内核中的同步 7.2.1 中断屏蔽 7.2.2 睡眠和唤醒 7.2.3 传统方法的局限性 7.3 多处理器系统 7.3.1 内存模型 7.3.2 同步支持 7.3.3 软件体系结构 7.4 多处理器同步问题 7.4.1 唤醒丢失问题 7.4.2 巨群...

    UNIX操作系统教程 张红光

    2.1.2用户的注册与注销11 2.1.3账户的管理12 2.1.4用户口令的管理12 2.1.5...传统UNIX系统体系结构34 2.5.2现代UNIX系统体系结构35 2.6UNIX系统使用注意事项36 2.6.1正确选择用户访问权限36 2.6.2移动存储设备的使用36 ...

    操作系统教程 孙钟秀主编

    介绍进程的顺序性和并发性,进程的协作和竞争,以进程交互、进程控制、进程通信和进程死锁问题为重点,讨论并发程序设计有关技术和各种进程互斥、同步、通信机制和工具。最后介绍了Windows2000/XP 的同步和通信机制...

    VC++可视化编程指南

    第一课 Windows编程和面向对象技术  1.1 Windows发展历史  1.2 Windows操作系统特点  1.3 Windows应用程序设计的特点 ... 12.2 线程的同步  12.3 串行通信与重叠I/O  12.4 一个通信演示程序  12.5 小结

    VC++ 编程指南_中文chm

    第一课 Windows编程和面向对象技术  1.1 Windows发展历史  1.2 Windows操作系统特点  1.3 Windows应用程序设计的特点 ... 12.2 线程的同步  12.3 串行通信与重叠I/O  12.4 一个通信演示程序  12.5 小结

    NIO框架Netty实现高性能高并发

    相比于传统基于Java序列化+BIO(同步阻塞IO)的通信框架,性能提升了8倍多。 事实上,我对这个数据并不感到惊讶,根据我5年多的NIO编程经验,通过选择合适的NIO框架,加上高性能的压缩二进制编解码技术,精 心的设计...

    VC++编程指南(中文版).chm

    VC++编程指南(中文版),不错的一本电子书。啥也不说了,直接看内容预览: 第一课 Windows编程和面向对象技术 ... 12.2 线程的同步  12.3 串行通信与重叠I/O  12.4 一个通信演示程序  12.5 小结

    高清Netty5.0架构剖析和源码解读

    传统BIO通信的弊端 在JDK 1.4推出JAVANIO1.0之前,基于JAVA 的所有Socket通信都采用 BIO 了同步阻塞模式( ),这种一请求一应答的通信模型简化了上层的应用开发, 但是在可靠性和性能方面存在巨大的弊端。...

    并行计算导论(原书第2版).[美]Ananth Grama(带详细书签).pdf

    7.6 控制线程及同步的属性 7.6.1 线程的属性对象 7.6.2 互斥锁的属性对象 7.7 线程注销 7.8 复合同步结构 7.8.1 读-写锁 7.8.2 障碍 7.9 设计异步程序的技巧 7.10 OpenMP:基于命令的并行编程标准 7.10.1 ...

    计算机操作系统(第三版)

    2.6.2 线程间的同步和通信 75 2.6.3 线程的实现方式 77 2.6.4 线程的实现 78 习题 81 第三章 处理机调度与死锁 3.1 处理机调度的层次 84 3.1.1 高级调度 84 3.1.2 低级调度 86 3.1.3 中级调度 87 3.2...

    千方百计笔试题大全

    75、socket通信(tcp/udp区别及JAVA的实现方式) 18 76、什么是java序列化,如何实现java序列化? 18 77、简述synchronized和java.util.concurrent.locks.Lock的异同 ? 18 78、abstract class Name { private ...

    java面试宝典

    75、socket通信(tcp/udp区别及JAVA的实现方式) 18 76、什么是java序列化,如何实现java序列化? 18 77、简述synchronized和java.util.concurrent.locks.Lock的异同 ? 18 78、abstract class Name { private ...

    EDA和SOA的融合以及实践

    内容EDA和SOAEvent-DrivenSOAEvent-DrivenSOA架构的特点Event-DrivenSOA在金融系统的应用Event-DrivenSOA架构...这主要对照于传统的基于线程的同步系统。EDA是一种以事件(event)为核心,提供事件产生,路由,消费已经

Global site tag (gtag.js) - Google Analytics