`

每隔一秒打印一次日志,共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);
	}
}

 

 

 

 

分享到:
评论

相关推荐

    用LED做的倒计时程序

    VC++中可以使用`SetTimer`函数创建一个定时器,设定每隔一秒触发一次事件。在每次触发时,程序会减小计数值,并更新LED的状态以显示剩余时间。同时,为了实现“每一秒有声音提示”,我们需要在每次计时器事件触发时...

    MySQL参数说明

    + 2 每提交事务写一次日志,但每隔一秒刷新一次相应的磁盘文件 * innodb_force_recovery:在 Innodb 的自动恢复失败后,从崩溃中强制启动,有 1-6 个级别,数值越低恢复的方式也保守,默认为 4 Log 的参数: * ...

    在X86上libevent的简单使用.docx

    下面是一个简单的`libevent`使用示例,展示如何利用`libevent`实现一个每隔一秒打印“hello world”的程序: 1. **引入必要的头文件**: ```c #include #include ``` 2. **定义事件处理函数**: ```c void...

    MySQL性能优化InnoDB buffer pool flush策略

    默认每隔一秒运行一次,5.6 版本里提供了一大堆的参数来控制 page cleaner 的 flush 行为,包括: * innodb_adaptive_flushing_lwm * innodb_max_dirty_pages_pct_lwmin * innodb_flushing_avg_loops * innodb_io_...

    基于内核线程的创建、使用和退出以及延时宏的补充说明介绍

    以下是一个简单的内核模块示例,它创建一个内核线程,每隔一秒钟在内核日志中打印字符。这个模块的`makefile`应该按照标准的模块构建规则编写,这里省略了具体实现。 ```c // 简化的示例代码,实际实现需要包含必要...

    java读取CPU内存信息

    这个程序每隔一秒钟会输出一次内存和线程的统计信息,但请注意,由于CPU利用率的计算涉及到时间间隔,所以需要对获取CPU时间的部分做适当修改,以获取一段时间内的变化,从而计算出CPU利用率。 在项目中,我们可以...

    JMeter操作文档

    例如,如果设置为10秒,共有10个线程,则每隔一秒启动一个线程。 - **循环次数**:每个线程执行请求的次数。若选择“永远”则表示线程将无限次地执行请求直到手动停止测试。 此外,还有其他高级配置项,如**启动...

    针对Java开发者的ApacheCamel入门指南

    在这个示例中,我们设置了一个定时器,每隔一秒向处理器发送一条消息,并简单地将消息打印出来。 在Java程序中,通常不直接写main方法,而是通过`org.apache.camel.main.Main`类启动Camel,传入路由构建器的类名,...

    RealClcok:接近真实时钟的优雅时钟

    创建一个周期性任务,每隔一秒或指定间隔更新时钟的显示,确保时间的实时性。 6. **格式化和展示** `DateTimeFormatter`用于时间的格式化和解析。我们可以自定义格式,如`"HH:mm:ss"`,然后使用`format()`方法将`...

Global site tag (gtag.js) - Google Analytics