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中,线程同步通信技术是通过wait()和notify()...
资源名称:Java多线程与并发库高级应用视频教程22集资源目录:【】01传统线程技术回顾【】02传统定时器技术回顾【】03传统线程互斥技术【】04传统线程同步通信技术【】04传统线程同步通信技术_分割纪录【】05线程...
8. **async/await**:异步编程模式虽然不是传统的线程同步技术,但它可以帮助开发者编写非阻塞代码,从而避免过度使用线程导致的资源浪费。 在实际编程中,选择合适的线程同步技术取决于具体的需求。例如,如果需要...
总的来说,这篇文章详细介绍了基于Windows2000的多线程串行通信技术,包括API函数的使用、串口的打开和配置、数据读写以及线程同步策略。这对于通信技术及工程领域的技术人员来说,是一份重要的参考资料,能够指导...
【标题】: "多线程串口通信技术在GPS导航中的应用 (2).pdf" 【描述】: 本文深入探讨了如何在GPS导航系统中利用多线程串口通信技术来实现实时获取定位数据,并确保系统能同时执行其他操作。 【标签】: 通信技术, ...
Java提供了synchronized关键字来实现线程同步锁机制,可以有效地控制对共享资源的访问,保证了多线程环境中的数据一致性。wait/notify机制是另一种重要的线程间通信手段,它允许线程在执行到某个点时可以主动让出CPU...
传统线程同步通信技术 - 线程之间的同步通信可以通过`wait()`、`notify()`和`notifyAll()`等方法来实现。 ##### 5. 线程范围内共享变量的概念与作用 - 线程范围内的共享变量是指多个线程可以访问同一个变量,需要...
在Linux中,可以使用`pthread_create()`创建线程,`pthread_join()`等待线程结束,以及`pthread_mutex_*`系列函数来管理和同步线程。 在实际的多线程并发通信实现中,服务器端需要维护一个线程池,当有新的连接请求...
Posix线程同步机制是指在 Unix/Linux 平台上,使用多线程技术来实现多计算任务的并发处理,并解决任务间需要大量数据通信的问题。本文对 Posix 线程同步机制进行了详细的分析和讨论,并结合分布式电网监控系统的应用...
【Linux线程技术】在操作系统领域,Linux线程是指在Linux环境下...NPTL直接集成到内核中,提供更好的线程同步和调度性能,同时也更好地实现了POSIX对线程行为的要求。因此,现代Linux系统中的线程编程更为稳定和高效。
在当今高速发展的信息技术领域中,网络通信技术扮演着至关重要的角色。尤其是在模拟训练系统中,为了确保气象参数、本舰参数以及目标参数等关键数据能够实时且准确地传输,采用高效的网络通信编程技术显得尤为重要。...
通过合理利用线程同步机制,可以有效避免并发问题,同时结合异步编程和线程池技术,能够进一步优化程序性能。在实际项目中,根据任务特性和需求选择合适的线程管理模式,是提升软件质量和用户体验的关键。
同时,如何更好地解决线程间的资源共享、数据同步和通信问题,以及如何进一步优化SMT处理器的设计,将是未来研究的重点方向。 ### 结论 总之,同时多线程技术是现代高性能处理器设计中的关键组成部分,它不仅有助...
三、线程同步 在多线程环境中,同步是非常重要的,以防止数据竞争和死锁等问题。C++提供了多种同步机制: 1. **互斥量(Mutex)**:`std::mutex`用于保护共享资源,确保同一时间只有一个线程访问。`std::lock_guard...
虽然async/await不是传统的线程同步技术,但它们可以帮助开发者编写异步代码,避免线程阻塞,提高应用的响应性。异步操作可以在后台线程上执行,主线程可以继续处理其他任务,从而实现资源的有效利用。 综上所述,...
5. **线程间共享存储**:线程间通信采用共享内存,意味着多个线程可以访问同一块内存区域,这种方式允许线程之间共享数据和状态,但需要谨慎处理并发访问时的同步问题,通常需要使用锁或者其他同步原语来避免数据...