多线程同步问题-练习题1-笔记整理
来源:互联网 发布:淘宝小崔韩代 编辑:程序博客网 时间:2024/05/23 21:06
练习题1
现有的程序代码模拟产生了16个日志对象,并且需要运行16秒才能打印完这些日志,
请在程序中增加4个线程去调用parseLog()方法来分头打印这16个日志对象,
程序只需要运行4秒即可打印完这些日志对象。
解决方案:将主线程中产生的数据存入到阻塞队列中,启动的四个消费者线程一次去队列中取数据。
题目代码示例:
/* 现有的程序代码模拟产生了16个日志对象,并且需要运行16秒才能打印完这些日志, 请在程序中增加4个线程去调用parseLog()方法来分头打印这16个日志对象, 程序只需要运行4秒即可打印完这些日志对象。 */public class Test1 {public static void main(String[] args) {System.out.println("begin"+System.currentTimeMillis()/1000);for (int i = 0; i < 16; i++) {String log=""+(i+1);{Test1.parseLog(log); //关键点是在此处理}}}public static void parseLog(String log){System.out.println(log+":"+System.currentTimeMillis()/1000);try {Thread.sleep(1000);} catch (InterruptedException e) {e.printStackTrace();}}}
改进后代码示例:
/* 现有的程序代码模拟产生了16个日志对象,并且需要运行16秒才能打印完这些日志, 请在程序中增加4个线程去调用parseLog()方法来分头打印这16个日志对象, 程序只需要运行4秒即可打印完这些日志对象。 解决方案:将主线程中产生的数据存入到阻塞队列中,启动的四个消费者线程一次去队列中取数据。 */public class Test1_1 {public static void main(String[] args) {System.out.println("begin"+System.currentTimeMillis()/1000);final BlockingQueue<String> blockingQueue=new ArrayBlockingQueue<String>(16);for (int i = 0; i < 4; i++) {new Thread(new Runnable() {@Overridepublic void run() {while(true){try {String data = blockingQueue.take();parseLog(data);} catch (InterruptedException e) {e.printStackTrace();}}}}).start();}for (int i = 0; i < 16; i++) {String log=""+(i+1);{try {blockingQueue.put(log);} catch (InterruptedException e) {e.printStackTrace();}//Test1_1.parseLog(log); //关键点是在此处理}}}public static void parseLog(String log){System.out.println(log+":"+System.currentTimeMillis()/1000);try {Thread.sleep(1000);} catch (InterruptedException e) {e.printStackTrace();}}}
0 0
- 多线程同步问题-练习题1-笔记整理
- 多线程同步问题-练习题2-笔记整理
- 多线程同步问题-练习题3-笔记整理
- 2016.6.21笔记(1)-多线程同步
- 多线程 同步笔记
- python学习笔记——多线程同步问题
- Java Web笔记 – Servlet多线程同步问题及其解决方法
- python学习笔记——多线程同步问题
- MFC多线程同步问题
- 多线程同步问题
- 多线程的同步问题
- java多线程同步问题
- 关于多线程同步问题
- jsp多线程同步问题
- 多线程同步死锁问题
- servlet 多线程同步问题
- 多线程同步问题
- Servlet多线程同步问题
- ACdream 1067:Triangles
- 做游戏,学编程(C语言) 2 最简单的飞机游戏
- task_struct解析
- 读计算机必看:美国顶尖IT公司从哪些大学招人最多?
- Redis Sentinel 说明
- 多线程同步问题-练习题1-笔记整理
- 禅道的使用
- A+B Problem IV
- HDU-5858 Hard problem(计算几何)
- 创建Stream
- hadoop报错解决方案---安装系列三
- 做游戏,学编程(C语言) 3 利用函数对飞机游戏进行重构
- LeetCode-150. Evaluate Reverse Polish Notation (JAVA)逆波兰表达式求值
- PHP设计模式系列(十一):状态模式