子线程先循环10次,然后主线程循环100次,再子线程循环10次,主线程循环100次,就这样循环往复50次。
public class Communtion01 {
public static void main(String args[]) {
final Bussiness buss = new Bussiness();
new Thread(new Runnable() {
public void run() {
for (int j = 1; j <= 50; j++) {
buss.sub(j);
}
}
}).start();
for (int j = 1; j <= 50; j++) {
buss.main(j);
}
}
}
class Bussiness {
private boolean subFlag = true;
//Cpu照顾sub线程,执行到sub(),但还不该sub执行,那就wait
public synchronized void sub(int j) {
while (!subFlag) {
try {
this.wait();
} catch (InterruptedException e) {
e.printStackTrace();
}
}
for (int i = 1; i <= 10; i++) {
System.out.println(Thread.currentThread().getName() + "在第" + j
+ "次循环了" + i);
}
subFlag = false;
this.notify();
}
public synchronized void main(int j) {
while(subFlag) {
try {
this.wait();
} catch (InterruptedException e) {
e.printStackTrace();
}
}
for (int i =1; i <=100; i++) {
System.out.println(Thread.currentThread().getName() + "在第" + j
+ "次循环了" + i);
}
subFlag = true;
this.notify();
}
}
经验:要用到共同数据(包括同步锁)或共同算法的若干方法应该归在同一个类身上,这种设计体现了高类聚和程序的健壮性。
互斥、同步、通信问题的逻辑不是写在线程代码上,而是在线程访问那个资源类上。
分享到:
相关推荐
多线程学习笔记 iOS开发中,多线程是一种常见的技术手段,用于优化应用程序的性能,提升用户体验。多线程的核心是让程序能够并发地执行多个任务,合理地利用设备的计算能力,尤其是在拥有多个核心的处理器上。 ...
这篇学习笔记将深入探讨Java多线程的核心概念、实现方式以及相关工具的使用。 一、多线程基础 1. 线程与进程:在操作系统中,进程是资源分配的基本单位,而线程是程序执行的基本单位。每个进程至少有一个主线程,...
【Android学习笔记--Binder】 Binder是Android系统中的核心组件,它是Android系统实现进程间通信(IPC,Inter-Process Communication)的主要方式。Binder机制允许不同进程的组件之间进行数据交换和功能调用,就像...
在Android开发中,网络编程是不可或缺的一部分,而Socket编程则是实现网络通信的核心技术。本文将主要探讨基于Java的Socket编程,包括TCP和UDP协议的使用。 首先,让我们了解一下Socket的基本通信模型。Socket,...
Java学习笔记是专门为Java初学者设计的一套详尽的学习资源,旨在帮助新手快速掌握这门广泛使用的编程语言。这份笔记涵盖了从基础概念到高级特性的全面内容,是学习和复习Java知识的理想工具。 1. **Java简介** ...
本篇学习笔记将深入探讨如何结合Socket与线程池来提升程序的运行效率。 一、Socket基础 Socket,也称为套接字,是网络编程中的一个重要概念,它是进程间通信(IPC)的一种方式,特别是在网络环境中。Socket提供了一...
4. **线程通信** - **wait(), notify(), notifyAll()**:Object类中的方法,用于线程间的通信,需在同步控制块或方法中使用。 - **BlockingQueue**:队列接口,常用于生产者消费者模型,如ArrayBlockingQueue、...
【UNIX多线程学习笔记】 在UNIX操作系统中,多线程是一种重要的编程模型,它允许多个执行流在单个进程中并发运行。多线程带来了许多优势,包括提高应用程序响应速度,充分利用多CPU系统的资源,以及优化程序结构,...
### Java线程学习笔记 #### 一、Java进程与线程概述 在Java中,一个JVM(Java虚拟机)实例本质上就是一个进程。进程在Java中由`java.lang.Process`类表示,它允许Java程序与操作系统进行交互,执行外部程序。进程...
5. **线程通信问题** - 生产者-消费者问题:一个线程生产数据,另一个线程消费数据,需要避免生产者过度生产或消费者提前消费。 - 死锁:两个或更多线程互相等待对方释放资源,导致所有线程都无法继续执行。 - ...
【标题】中的“自我学习笔记--LUA;python:网络编程等”表明这是一份包含LUA和Python语言,特别是关于网络编程的学习资料。LUA和Python都是编程语言,广泛应用于游戏开发、脚本编写、自动化任务以及网络服务等领域。 ...
5. **线程通信** - **线程间的通信**:可以通过共享变量、wait(), notify(), notifyAll()方法或者使用BlockingQueue等并发工具类来传递信息和协调线程间的行为。 6. **线程池** - **缓存线程池**:Executors....
本文档集合了关于Go语言的学习笔记,旨在帮助读者全面理解并掌握Go语言的核心概念、语法特性以及实际应用。 一、基础语法 Go语言的语法简洁明了,易于上手。它采用了C风格的语法,但增加了诸如类型推断(Type ...
这篇学习笔记主要介绍了如何在Android应用中实现这一功能。以下是对笔记内容的详细解释: 首先,Android应用需要使用`Socket`类来建立与服务器之间的连接。在提供的代码片段中,可以看到在`onClick`方法中,创建了...
本篇学习笔记主要涵盖了线程基础、threading模块的使用以及线程同步控制。 首先,线程是操作系统分配CPU执行时间的基本单位,一个进程可以包含多个线程。在Python3中,线程的状态主要包括新建、就绪、运行、死亡、...
这份"C++多线程学习笔记1"涵盖了基础到进阶的多线程概念,旨在帮助初学者快速掌握这一关键技能。 首先,C++11引入了对多线程的支持,引入了`<thread>`库,使得创建和管理线程变得简单。创建一个新的线程可以使用`...
需要注意的是,由于`onReceive()`的生命周期短暂,创建新线程进行耗时操作可能会导致线程未执行完BroadcastReceiver就已销毁。另外,在内存紧张时,系统会优先结束不包含任何活动组件的进程,这可能导致由...