今天来写一篇Java关于多线程之线程通信例子。这是我学Java和工作这些年来,首次发表的博文,自己支持自己一下。
题目要求:写一个Java多线程程序,要求子线程循环输出10次,然后主线程循环输出10次,再接着子循环输出10次,再然后主线程循环输出10次。。。如此往复10次。
请大家帮我分析下,我的代码例子如下:
package org.jabari.tech.test;public class ConcurrentTest1 {
class BizObj {
//当前执行游标是否在子线程(true:子线程执行;false:父线程执行)
private boolean cursorInSub;
public BizObj(boolean cursorInSub) {
super();
this.cursorInSub = cursorInSub;
}
public boolean isCursorInSub() {
return cursorInSub;
}
public void setCursorInSub(boolean cursorInSub) {
this.cursorInSub = cursorInSub;
}
}
public static void main(String[] args){
ConcurrentTest1 t = new ConcurrentTest1();
//创建一个锁对象,默认当前执行子线程。
final BizObj objLock = t.new BizObj(true);
new Thread(new Runnable(){
public void run() {
for(int j=0;j<10;j++){
synchronized(objLock) {
while (!objLock.isCursorInSub()) {
try {
objLock.wait();
} catch (InterruptedException e) {
e.printStackTrace();
}
}
for (int i = 0; i < 10; i++) {
System.out.println(Thread.currentThread().getName()+"-loop["+j+"]-"+i);
}
objLock.setCursorInSub(false);
objLock.notify();
}
}
}
},"sub").start();
//这里其实不需要再New一个主线程执行,因为main方法本身就是一个主线程单独执行。
// new Thread(new Runnable() {
// @Override
// public void run() {
for(int j=0;j<10;j++){
synchronized(objLock) {
while (objLock.isCursorInSub()) {
try {
objLock.wait();
} catch (InterruptedException e) {
e.printStackTrace();
}
}
for (int i = 0; i < 10; i++) {
System.out.println(Thread.currentThread().getName()+"-loop["+j+"]-"+i);
}
objLock.setCursorInSub(true);
objLock.notify();
}
}
// }
// },"main").start();
// System.out.println(Thread.currentThread().getName()+" Finishes!");
}
}
相关推荐
Java多线程编程是开发高并发应用的关键技术之一,它允许程序同时执行多个任务,提高系统资源利用率。在Java中,`wait()` 和 `notify()` 方法是实现线程间通信和协作的重要工具,它们属于 `java.lang.Object` 类,这...
本文旨在解析一个具体的Java多线程示例代码,以帮助读者更好地理解`wait()`与`notify()`方法的作用及其实现机制。这两个方法是Java中实现线程间通信的重要手段之一,尤其在解决生产者消费者模型、读者写者问题等经典...
总的来说,Java多线程提供了丰富的功能,包括线程的创建、启动、中断、同步以及异常处理等。通过合理利用这些工具,开发者可以构建出高效、稳定且响应迅速的多线程应用程序。在实际编程中,要特别注意线程安全和性能...
总结一下,`wait()`, `notify()`, 和 `notifyAll()` 是Java多线程编程中的核心工具,它们与`synchronized`关键字一起,为线程间的协作提供了强大的支持。理解并熟练掌握这些概念,对于编写高效、安全的多线程程序至...
Java多线程是Java编程中的重要概念,它允许程序同时执行多个任务,极大地提升了程序的效率和性能。在Java中,实现多线程有两种主要方式:通过实现Runnable接口或者继承Thread类。本案例将深入探讨Java多线程中的关键...
在Java编程语言中,多线程是核心特性之一,它允许程序同时执行多个任务,从而提高了应用程序的效率和响应...文档“java多线程实例.docx”可能包含具体的示例代码和详细解释,建议参考学习,以加深对Java多线程的理解。
在Java编程中,多线程是一项关键特性,...总之,这个"JAVA多线程的一个带UI界面的例子"涵盖了Java多线程编程和GUI设计的核心概念,通过实际的代码示例,有助于开发者深入理解如何在实际应用中正确、高效地使用多线程。
这个名为"Java多线程的小例子——吃包子"的示例,旨在帮助开发者直观地理解多线程的工作原理。下面我们将深入探讨该示例所涉及的核心知识点。 首先,多线程通常涉及到以下几个关键概念: 1. **线程(Thread)**:...
总之,Java多线程和异步调用是构建高效、响应迅速的应用程序的关键技术。通过合理利用这些工具和机制,开发者可以编写出能够充分利用多核处理器优势的代码,从而提高软件性能。在实际应用中,理解并熟练掌握这些概念...
Java中的多线程设计涉及到许多核心概念,其中wait/notify机制是实现线程间通信和协作的关键工具。这个机制主要用于解决资源的分配和同步问题,它依赖于Java的内置锁机制,即`synchronized`关键字和对象锁。 首先,...
3. **线程通信**:`wait()`, `notify()` 和 `notifyAll()` 方法用于线程间的通信,但它们必须在`synchronized`代码块中使用,否则会抛出异常。 4. **线程状态**:Java线程有五种状态:新建、可运行、运行、阻塞和...
下面我们将深入探讨Java多线程的核心概念、同步机制、死锁问题以及wait/notify机制,以"生产者与消费者"的例子来具体阐述。 首先,了解Java中的线程。线程是操作系统分配CPU时间的基本单位,每个线程都有自己的程序...
### Java多线程编程详解:深入理解与实践 #### 一、理解多线程机制 多线程,作为现代编程语言的重要特性之一,允许在单一应用程序内并发执行多个任务,从而极大提升了程序的效率和响应速度。在Java中,多线程的...
Java多线程是Java编程中的重要概念,它允许程序同时执行多个任务,提高了程序的效率和响应性。在Java中,实现多线程有两种主要方式:通过继承`Thread`类和实现`Runnable`接口。 1. 继承Thread类: 当你需要创建一...
在Java编程中,多线程是处理并发执行任务的关键技术之一。`wait()`、`notify()`和`notifyAll()`是Java中的三个关键字,它们属于Object类的方法,主要用于线程间的通信,尤其在实现生产者消费者模式时发挥着重要作用...
《JAVA多线程设计模式》PDF 下载 《Java线程 高清晰中文第二版》中文第二版(PDF) 前言 第一章 线程简介 Java术语 线程概述 为什么要使用线程? 总结 第二章 Java线程API 通过Thread类创建线程 使用Runable接口...
Java多线程编程是Java开发中的重要组成部分,它允许程序同时执行多个任务,提升系统效率。在Java中,多线程可以通过两种主要方式实现:继承`Thread`类和实现`Runnable`接口。 **继承Thread类**: 当你创建一个新的...
在Java编程中,多线程的使用是实现程序并发运行的重要手段。本文将总结五个关键的线程控制方法:wait()、await()、sleep()、yield()和join()。这些方法各自有独特的用途和不同的工作机制。 一、wait()、notify()、...
《深入学习:Java多线程编程》是一本专注于Java并发技术的专业书籍,旨在帮助开发者深入理解和熟练运用Java中的多线程编程。Java多线程是Java编程中的核心部分,尤其在现代高性能应用和分布式系统中不可或缺。理解并...
Java多线程是Java编程中一个非常重要的领域,它允许程序在同一时间执行多个任务,从而提高了效率和资源利用率。在Java中,线程是进程中的一个执行单元,每个进程至少包含一个线程,通常Java虚拟机(JVM)启动时会...