`

传统线程同步通信技术

阅读更多
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
分享到:
评论

相关推荐

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

    张孝祥老师的课程"传智播客_张孝祥_传统线程同步通信技术"深入浅出地讲解了这一主题,旨在帮助开发者理解和掌握线程间的协作与数据共享方式。 线程同步是指在多线程环境下,控制多个线程按一定的顺序执行,以避免...

    传统线程同步通信技术二

    了解并熟练掌握这些传统线程同步通信技术,能帮助你在多线程编程中有效地避免数据竞争,提高程序的并发性和可靠性。在实际开发中,应根据具体需求选择最合适的同步机制,同时考虑线程同步带来的开销,以实现最佳性能...

    传统线程同步通信技术一

    本文将深入探讨传统线程同步通信技术,主要包括临界区、信号量、互斥量以及事件对象。 1. **临界区**(Critical Section) 临界区是程序中用于访问共享资源的代码段。为了防止多个线程同时进入临界区,我们可以...

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

    "Java并发之传统线程同步通信技术代码详解" Java并发之传统线程同步通信技术代码详解是Java编程语言中的一种重要技术,主要用于解决多线程之间的同步通信问题。在Java中,线程同步通信技术是通过wait()和notify()...

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

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

    c#线程同步的典型例子

    8. **async/await**:异步编程模式虽然不是传统的线程同步技术,但它可以帮助开发者编写非阻塞代码,从而避免过度使用线程导致的资源浪费。 在实际编程中,选择合适的线程同步技术取决于具体的需求。例如,如果需要...

    基于Windows2000的多线程串行通信技术.pdf

    总的来说,这篇文章详细介绍了基于Windows2000的多线程串行通信技术,包括API函数的使用、串口的打开和配置、数据读写以及线程同步策略。这对于通信技术及工程领域的技术人员来说,是一份重要的参考资料,能够指导...

    多线程串口通信技术在GPS导航中的应用 (2).pdf

    【标题】: "多线程串口通信技术在GPS导航中的应用 (2).pdf" 【描述】: 本文深入探讨了如何在GPS导航系统中利用多线程串口通信技术来实现实时获取定位数据,并确保系统能同时执行其他操作。 【标签】: 通信技术, ...

    Java多线程技术在网络通信系统中的应用.pdf

    Java提供了synchronized关键字来实现线程同步锁机制,可以有效地控制对共享资源的访问,保证了多线程环境中的数据一致性。wait/notify机制是另一种重要的线程间通信手段,它允许线程在执行到某个点时可以主动让出CPU...

    java加强笔记

    传统线程同步通信技术 - 线程之间的同步通信可以通过`wait()`、`notify()`和`notifyAll()`等方法来实现。 ##### 5. 线程范围内共享变量的概念与作用 - 线程范围内的共享变量是指多个线程可以访问同一个变量,需要...

    Linux下基于socket多线程并发通信的实现

    在Linux中,可以使用`pthread_create()`创建线程,`pthread_join()`等待线程结束,以及`pthread_mutex_*`系列函数来管理和同步线程。 在实际的多线程并发通信实现中,服务器端需要维护一个线程池,当有新的连接请求...

    Posix线程同步机制及其在电网监控系统中的应用借鉴.pdf

    Posix线程同步机制是指在 Unix/Linux 平台上,使用多线程技术来实现多计算任务的并发处理,并解决任务间需要大量数据通信的问题。本文对 Posix 线程同步机制进行了详细的分析和讨论,并结合分布式电网监控系统的应用...

    linux线程技术

    【Linux线程技术】在操作系统领域,Linux线程是指在Linux环境下...NPTL直接集成到内核中,提供更好的线程同步和调度性能,同时也更好地实现了POSIX对线程行为的要求。因此,现代Linux系统中的线程编程更为稳定和高效。

    基于消息的异步套接字和多线程技术网络通信编程

    在当今高速发展的信息技术领域中,网络通信技术扮演着至关重要的角色。尤其是在模拟训练系统中,为了确保气象参数、本舰参数以及目标参数等关键数据能够实时且准确地传输,采用高效的网络通信编程技术显得尤为重要。...

    Delphi多线程详解_delphi_delphi多线程_多线程_

    通过合理利用线程同步机制,可以有效避免并发问题,同时结合异步编程和线程池技术,能够进一步优化程序性能。在实际项目中,根据任务特性和需求选择合适的线程管理模式,是提升软件质量和用户体验的关键。

    同时多线程技术SMT

    同时,如何更好地解决线程间的资源共享、数据同步和通信问题,以及如何进一步优化SMT处理器的设计,将是未来研究的重点方向。 ### 结论 总之,同时多线程技术是现代高性能处理器设计中的关键组成部分,它不仅有助...

    C++ 多线程综合技术篇

    三、线程同步 在多线程环境中,同步是非常重要的,以防止数据竞争和死锁等问题。C++提供了多种同步机制: 1. **互斥量(Mutex)**:`std::mutex`用于保护共享资源,确保同一时间只有一个线程访问。`std::lock_guard...

    C#线程同步的几种方法总结

    虽然async/await不是传统的线程同步技术,但它们可以帮助开发者编写异步代码,避免线程阻塞,提高应用的响应性。异步操作可以在后台线程上执行,主线程可以继续处理其他任务,从而实现资源的有效利用。 综上所述,...

    时钟共享多线程处理器通信机制的设计与实现.pdf

    5. **线程间共享存储**:线程间通信采用共享内存,意味着多个线程可以访问同一块内存区域,这种方式允许线程之间共享数据和状态,但需要谨慎处理并发访问时的同步问题,通常需要使用锁或者其他同步原语来避免数据...

Global site tag (gtag.js) - Google Analytics