`

每隔一秒打印一次日志,共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... 一个线程可以理解为一个人,打印...

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

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

    log4j2异步多线程打印

    1.该工程为maven构建,要有maven环境 2.支持异步打印 3.支持多线程打印

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

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

    多线程调试打印日志类

    将这个类添加到你的工程中,修改你要创建的日志名称,就OK,支持线程中打印。 不过最好自己修改一下,因为会一直打日志,直到文件最大。可以判断一下,如果日志文件过大,则重新创建一个文件.

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

    1. 实现一个类ThreadMock(模拟线程),用来模仿Thread类,该类具有以下特征: a) Public class ThreadMock implents ...例如第一个线程打印1,接着第二个线程打印100,接着第一个线程打印2。。。。。。。。依此类推。

    java实验4.doc

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

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

    LogBox 类是集成多线程的日志打印类, 调用简单,具有debug 日志开关。 可以实现Error \ Debug\ Information \Warning 4种类型的日志输出。

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

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

    JAVA多线程运用

    3. 修改实验1第2题的程序,添加适当代码,以确保每个数字都恰好只被打印一次。 实验步骤: (1)、创建三个类Counter, Printer,Storage (2)、 创建TestCounter类,在该类中定义main函数,在main函数中定义Storage...

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

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

    易语言多线程多次启动一个子程序

    易语言多线程多次启动一个子程序源码,多线程多次启动一个子程序,循环

    多线程编写同一个txt日志

    线程 编写 txt日志 临界代码区 数组模版 错误消息打印

    java多线程实验

    java设计两个线程,一个线程充当电子表,每隔一秒在窗口上显示一下系统时间;另一个线程充当闹钟,每到整点就开始报时,即在窗口显示5次整点提示,同时将第一个线程挂起,报时完毕后再将第一个线程恢复。实验结果如...

    3个线程,根据自定义规则打印线程名称

    编写一个程序,开启3个线程,这3个线程的ID分别为A、B、C。 如果要求打印 ABCBCACAC,线程对应打印信息到控制台。 弊端:耗费cpu

    一个多线程下载程序

    VC++做的一个多线程下载程序

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

    本实验通过设计两个线程,一个是文章下载线程和一个文章打印线程,用来实现模拟线程同步打印机,文章下载线程实现把文章下载到缓冲区,文章打印线程实现把文章打印出来。

    3个线程,根据不同规则打印线程名称

    编写一个程序,开启3个线程,这3个线程的ID分别为A、B、C。 如果要求打印 ABCBCACAC,线程对应打印信息到控制台。 缺点:耗费cpu

    使用三种VC的多线程同步方法编写一个多线程的程序

    1.使用三种VC的多线程同步方法编写一个多线程的程序(要求在屏幕上先显示Hello,再显示World)。 1)基于全局变量的多线程同步程序; 2)基于事件的多线程同步程序; 3)基于临界区的多线程同步程序。

    C++日志库-线程安全

    C++线程安全日志库-Win32接口实现,博客讲解:https://www.cnblogs.com/swarmbees/ -&gt;C++线程安全日志库-Win32接口实现

Global site tag (gtag.js) - Google Analytics