`

每隔一秒打印一次日志,共16秒打印完,加4个线程修改程序,使之4秒打印完

 
阅读更多

原来的程序:

package test1;

public class ThreadTest2 {
	public static void main(String[] args) {
		try {
			for (int i = 0; i < 16; i++) { // 此行代码不能动
				final String log = "" + (i + 1);// 此行代码不能动
				parseLog(log);
			}
		} catch (InterruptedException e) {
			e.printStackTrace();
		}
	}

	public static void parseLog(String log) throws InterruptedException {
		System.out.println(log + ":" + System.currentTimeMillis() / 1000);
		Thread.sleep(1000);
	}
}

 

用4个线程和一个阻塞队列,修改此程序

package test1;

import java.util.concurrent.ArrayBlockingQueue;

public class ThreadTest1 {
	public static void main(String[] args) {
		
		final ArrayBlockingQueue<String> q = new ArrayBlockingQueue<String>(16);
		System.out.println("begin:" + System.currentTimeMillis() / 1000);
		
		for (int i = 0; i < 4; i++) {
			new Thread(new Runnable() {
				@Override
				public void run() {
					while (true) {
						try {
							String log = q.take();
							parseLog(log);
						} catch (InterruptedException e) {
							e.printStackTrace();
						}
					}
				}
			}).start();
		}
		
		for (int i = 0; i < 16; i++) { // 此行代码不能动
			final String log = "" + (i + 1);// 此行代码不能动
			try {
				q.put(log);
			} catch (InterruptedException e) {
				e.printStackTrace();
			}
		}
	}

	public static void parseLog(String log) throws InterruptedException {
		System.out.println(log + ":" + System.currentTimeMillis() / 1000);
		Thread.sleep(1000);
	}
}

 

 

 

 

分享到:
评论

相关推荐

    java多线程每个线程挨着打印ABC的4种实现方式

    java多线程每个线程挨着打印ABC的4种实现方式,有4个线程t1、t2、t3、t4,t1打印A后t2打印A再t3打印A再t4打印A,然后从新回到t1打印B再t2打印B...t4打印B... 4个线程轮流打印abc... 一个线程可以理解为一个人,打印...

    log4j2异步多线程打印

    传统的日志系统在处理大量日志时可能会成为系统性能瓶颈,因为它们通常是同步的,这意味着每个日志事件都会阻塞应用程序的执行直到日志被写入。Log4j2引入了异步日志记录器,通过使用后台线程处理日志事件,从而避免...

    多线程调试打印日志类

    "多线程调试打印日志类"是一个专门设计用于在多线程环境中记录和打印日志的C++类。此类实现了一个单例模式,确保在整个应用程序中只有一个实例存在,从而避免了资源竞争和日志混乱的问题。 首先,单例模式是一种...

    java10个线程按照顺序打印1-100

    在顺序打印问题中,每个线程在打印完数字后需要调用`notify()`来唤醒下一个线程。 3. **Semaphore(信号量)**:`java.util.concurrent.Semaphore`类提供了一种控制同时访问特定资源的线程数量的方法。在顺序打印...

    启动两个线程,一个线程打印1~52,另一个线程打印A~Z

    启动两个线程,一个线程打印1~52,另一个线程打印A~Z

    C#多线程实现调用外部程序并获取打印结果

    一个简单的例子,C#多线程实现调用外部程序并获取打印结果 一个简单的例子,C#多线程实现调用外部程序并获取打印结果 一个简单的例子,C#多线程实现调用外部程序并获取打印结果 一个简单的例子,C#多线程实现调用...

    每秒显示一次电子时钟源代码

    标题中的“每秒显示一次电子时钟源代码”是指一个Java程序,它的功能是在控制台上每秒钟更新并显示当前的时间。这个程序通过实现Runnable接口并创建一个线程来完成任务,确保时间的实时更新。 首先,我们要理解Java...

    C++ Log4z日志打印库

    **C++ Log4z日志打印库** 在C++编程中,日志记录是一个至关重要的环节,它能够帮助开发者在程序运行过程中跟踪错误、调试代码和优化性能。Log4z是一个专门为C++设计的日志记录库,其设计理念源于Java中的Log4j。Log...

    Android-可保持线程日志统一输出多线程不混乱

    "Android-可保持线程日志统一输出多线程不混乱"这个主题关注的是如何在多线程环境中,有效地组织和打印线程相关的日志,以便于开发者追踪和理解程序执行流程。在多线程环境下,如果不对日志进行适当的管理,不同线程...

    LogBox 日志打印类(多线程,高并发日志打印类)

    LogBox 是一个专为处理高并发环境而设计的日志打印类,它集成了多线程技术,确保在复杂的系统环境中能够稳定、高效地记录和输出日志信息。这个类提供了丰富的功能,允许开发者轻松地控制日志级别,包括Error、Debug...

    用C#实现的多线程同步打印文章(windows操作系统实验)

    这个实验的核心是创建两个独立的线程,一个用于文章的下载,另一个用于文章的打印,同时利用线程同步机制确保数据的安全与正确性。 首先,让我们了解一下多线程的概念。在计算机编程中,线程是程序执行的基本单元,...

    多线程编写同一个txt日志

    本话题将深入探讨如何在多线程环境下编写一个共享的txt日志文件,并涉及相关技术,如临界代码区、数组模板和错误消息打印。 首先,多线程编写同一个txt日志文件时,我们需要考虑线程安全问题。当多个线程同时尝试...

    Linux C 实现日志打印功能

    1. **日志级别控制**:定义一个枚举类型或常量来表示日志级别,并在打印日志时根据设定的级别筛选信息。例如: ```c enum LogLevel {DEBUG, INFO, NOTICE, WARNING, ERROR, CRITICAL, ALERT, EMERGENCY}; ``` 2....

    java实验4.doc

    假设两个窗口同时出售一次列车的车票,车票就是共享资源,两个窗口就是两个线程。 3、编写程序,实现线程间的同步控制。假设有一个生产者(Producer),一个消费者(Consumer)。生产者产生0~9的整数,将它们存储在...

    多线程 打印1-99,100-199

    在 Java 中,`Runnable` 接口是用于实现多线程的一种方式,它只定义了一个 `run()` 方法,当创建一个实现了 `Runnable` 接口的类时,就需要重写这个方法来定义线程的具体行为。 **1.2 ThreadMock 类的 start 方法**...

    C# 日志Log打印类,c++打印日志,C#

    因此,理解和掌握日志打印技术是每个程序员必备的技能之一。 压缩包中的"C# 日志Log打印类.txt"很可能是这个自定义日志类的源代码,通过阅读和学习,你可以深入理解日志管理类的设计思想和实现方式,从而提升自己的...

    两个线程,一个求最大数,一个用图形化窗口显示出来,适合新人学习或当作业

    我们使用的计算机系统就是一个多线程程序,我们在编辑文档时,可以同时...要求:每隔5秒求一次前n个数的最大者,然后再隔5秒求前n+1个数的最大者,依次类推,并以图形化形式实时显示运行结果。郑州轻工业大学实验作业。

    文件打印问题 (c++多线程实现)

    线程是程序执行的最小单位,每个线程都有自己的执行路径,它们共享同一内存空间。在处理文件打印这样的任务时,多线程可以并行地读取、处理和打印多个文件,从而提高效率。 在“文件打印问题”中,可能会遇到的一个...

    C语言程序日志打印和日志文件

    在IT行业中,日志系统是软件开发不可或缺的一部分,它用于记录程序运行时的详细信息,以便于调试、故障排查和性能分析。C语言虽然没有内置的日志处理功能,但通过自定义代码,我们可以构建强大的日志打印和日志文件...

    多线程设计一个火车售票模拟程序

    "多线程设计一个火车售票模拟程序" 在本实验中,我们将使用 Java 语言来设计一个火车售票模拟程序。这个程序模拟了火车站中的售票情况,具有5个售票点,每个售票点都可以售出火车票。我们将使用多线程技术来实现这...

Global site tag (gtag.js) - Google Analytics