`

多线程 通过 公共数据区 协调运行

    博客分类:
  • J2SE
阅读更多

多线程 通过 公共数据区 协调运行:

 

每个线程打印同1个字母,多个线程轮流打印,

代码:

package test;

public class LetterPrinter extends Thread {
	public static final char[] cs = new char[] { 'h', 'e', 'l', 'l', 'o', ',' };
	/** 指定当前可以运行的线程的 index 属性值,相当于公共数据区,用于协调多个线程 */
	public static int CURRENT_INDEX = 0;

	private int index;
	private int count = 5;

	public LetterPrinter(int index) {
		this.index = index;
	}

	public void run() {
		while (count > 0) {
			if (index == CURRENT_INDEX) { // 如果轮到了当前线程,则执行打印,否则不打印
				printLetter();
				count--;
			}
			// 让出资源,让其他线程运行
			Thread.yield();
		}
	}

	/** 打印,该方法是同步的,同1时间只能有1个线程访问,该方法设置了公共数据区的值,以协调各线 */
	public synchronized void printLetter() {
		System.out.print(cs[index]);
		CURRENT_INDEX = (index == (cs.length - 1) ? 0 : index + 1);
	}

	public int getIndex() {
		return index;
	}

	public void setIndex(int index) {
		this.index = index;
	}

	public int getCount() {
		return count;
	}

	public void setCount(int count) {
		this.count = count;
	}

	public static void main(String[] args) {
		for (int i = 0; i < cs.length; i++) {
			new LetterPrinter(i).start();
		}
	}
}
 
分享到:
评论

相关推荐

    C#的多线程机制探索

    在多线程程序中,线程之间常常需要交换数据或者协调工作。C#提供了多种机制来支持线程间的通信: 1. **使用公共变量**:最简单的方法之一是通过共享变量实现通信,但需要确保数据的一致性和线程安全。 2. **使用...

    【Qt】多线程局域网文件传输

    在本文中,我们将深入探讨如何使用Qt框架实现一个基于多线程的局域网文件传输应用。这个项目涉及的关键技术包括Qt的网络编程、多线程以及模型/视图架构,这些都是开发高效、用户友好的桌面应用的重要组成部分。 ...

    多线程串口通信技术及其在火灾监测中的应用.pdf

    多线程编程的关键在于合理分配资源和协调线程间的同步,确保数据的正确性和一致性。 【C# SerialPort 类】是.NET框架提供的用于串口通信的类库,提供了丰富的API供开发者使用。利用C# SerialPort类,开发者可以方便...

    java多线程编程实践

    它为多线程环境下的数据传递提供了一种高效且安全的方式。`BlockingQueue`的主要特点是,当队列满时,添加元素的操作会被阻塞;当队列空时,取出元素的操作会被阻塞,直到条件满足为止。 - **插入操作**:包括`add`...

    Unicode编码的远程控制源代码 多线程

    总结起来,这个远程控制源代码充分利用了Unicode编码以支持多种语言环境,通过多线程技术提高了并发处理能力。DarkShell作为主控程序,协调DarkDll和其他组件工作,InstallSer负责服务的安装,而DarkShellInfo中的...

    java多线程核心编程技术

    假设我们需要开发一个多线程应用程序,其中有一个数据处理模块需要对大量数据进行处理。我们可以使用`ThreadPoolExecutor`来管理线程池,通过`Runnable`接口定义每个线程的具体任务。 1. **定义Runnable接口实现类*...

    【BAT必备】多线程面试题

    ### 【BAT必备】多线程面试题解析 #### 一、多线程基本概念 **1.1 什么是多线程?** 多线程是指在同一个应用或进程中同时执行多个线程来完成任务的一种机制。它能充分利用多核处理器的能力,提高程序运行效率。 ...

    Android多线程断点下载.zip

    多线程下载通过将文件分割成多个部分并同时下载,可以显著提高下载速度。每个线程负责下载文件的一个部分,然后在后台合并这些部分。这种方法提高了效率,尤其是在网络环境变化的情况下,因为即使一个线程遇到问题,...

    【独家】【笔面试题库】12.接口包与多线程1

    为了避免多线程环境下数据的不一致性,Java提供了各种同步机制,如`synchronized`关键字、`wait()`, `notify()`, `notifyAll()`方法以及`java.util.concurrent`包中的工具类,用于线程间的协调和通信。 了解并熟练...

    Java线程的基本概念

    在运行过程中,可以通过`Thread.currentThread()`获取当前正在执行的线程对象,通过`getId()`获取线程ID,`getName()`获取线程名称,这些方法可以帮助我们追踪和调试多线程程序。 线程的并发执行依赖于操作系统的...

    实现生成者消费者问题

    在操作系统课程设计中,"实现生成者消费者问题"是一个经典的多线程并发控制问题,它主要探讨了如何在多线程环境下有效地管理共享资源。在这个问题中,生产者线程负责生产数据,而消费者线程则负责消费这些数据。为了...

    操作系统课程设计-linux进程与线程的通讯

    - **线程安全**:确保函数在多线程环境下正确运行,避免数据不一致或资源冲突。 5. **课程设计报告和任务书中的重点** - **任务书**可能包括设计目标、具体实现步骤、预期结果和评估标准等,要求学生理解并实现...

    Android 线程同步Demo

    在Android开发中,多线程是提升应用性能和用户体验的重要手段。然而,如果没有正确地管理线程,可能会引发数据竞争、死锁等问题,这正是线程同步所关注的重点。线程同步是为了确保多个线程在访问共享资源时能按照...

    利用线程实现生产者消费者问题

    在这个问题中,“生产者”负责生成数据并将其放入公共缓冲区中,“消费者”则负责从缓冲区取出数据进行处理。这个问题的核心在于如何协调生产者与消费者之间的工作,避免缓冲区溢出或空闲等问题。 #### 二、生产者...

    可在两个程序之间传递数据

    在IT领域,程序之间的数据传递是一项基础且至关重要的任务,特别是在多进程或多线程编程、分布式系统以及组件式软件开发中。标题“可在两个程序之间传递数据”和描述“有两个模块,一个发送数据;一个接收数据”所...

    多个海康相机视频录制C++

    C++可以利用多线程或并发处理技术来并行处理来自多个相机的数据,确保视频流的一致性和连贯性。 3. **C++编程**:作为一款强类型、静态编译的通用编程语言,C++提供了高效、灵活和低级别的内存控制,适合开发高性能...

    四种线程同步控制方法介绍

    为了防止多个线程间因访问共享资源导致的数据不一致或者竞态条件等问题,需要采取有效的方法来进行同步控制。本文将详细介绍四种基本的线程同步控制方法:临界区、互斥量、信号量以及事件。 #### 1. 临界区 ...

    Java后端开发面试宝典

    线程安全性指的是程序在多线程环境下能否正确地运行,即不会因并发执行而导致数据错误。一个线程安全的程序应当能够在任何并发条件下都能保持数据的一致性。 **线程安全性的级别:** - **不可变对象**:如`String`...

    最新的多核程序设计...讲解了在多核平台上进行软件开发的理论与方法

    MFC是对Win32 API的一种类库封装,通过面向对象的方式来简化编程,而.NET Framework则包含了公共语言运行库(CLR)和框架类库(FCL),其中FCL的System.Threading命名空间提供了大量支持多线程的类和接口。...

    cs.rar_实验报告_生产者报告

    在计算机科学领域,"生产者-消费者"问题是一个经典的多线程...通过这份实验报告,学习者不仅可以深入理解多线程同步的概念,还能掌握在Linux环境下解决并发问题的实际技能,这对于理解和开发多线程应用软件至关重要。

Global site tag (gtag.js) - Google Analytics