使用了自己写的log4j拓展显示线程ID的jar包。
运行效果:
写道
[2014-03-27 23:36:20.818][9][com.zwh.log4jtest.Storage][INFO]: producter int <<534, and list is [].+.
[2014-03-27 23:36:21.832][9][com.zwh.log4jtest.Storage][INFO]: producter int <<92, and list is [534].+.
[2014-03-27 23:36:22.847][9][com.zwh.log4jtest.Storage][INFO]: producter int <<30, and list is [534, 92].+.
[2014-03-27 23:36:23.862][8][com.zwh.log4jtest.Storage][INFO]: consumer int is >>534, and list is [92, 30]...
[2014-03-27 23:36:24.877][8][com.zwh.log4jtest.Storage][INFO]: consumer int is >>92, and list is [30]...
[2014-03-27 23:36:25.892][10][com.zwh.log4jtest.Storage][INFO]: consumer int is >>30, and list is []...
[2014-03-27 23:36:26.907][27][com.zwh.log4jtest.Storage][INFO]: producter int <<30, and list is [].+.
[2014-03-27 23:36:27.922][25][com.zwh.log4jtest.Storage][INFO]: producter int <<783, and list is [30].+.
[2014-03-27 23:36:28.937][24][com.zwh.log4jtest.Storage][INFO]: consumer int is >>30, and list is [783]...
[2014-03-27 23:36:29.952][24][com.zwh.log4jtest.Storage][INFO]: consumer int is >>783, and list is []...
[2014-03-27 23:36:30.967][23][com.zwh.log4jtest.Storage][INFO]: producter int <<952, and list is [].+.
[2014-03-27 23:36:31.982][21][com.zwh.log4jtest.Storage][INFO]: producter int <<901, and list is [952].+.
[2014-03-27 23:36:32.997][21][com.zwh.log4jtest.Storage][INFO]: producter int <<93, and list is [952, 901].+.
[2014-03-27 23:36:34.012][20][com.zwh.log4jtest.Storage][INFO]: consumer int is >>952, and list is [901, 93]...
[2014-03-27 23:36:35.027][20][com.zwh.log4jtest.Storage][INFO]: consumer int is >>901, and list is [93]...
[2014-03-27 23:36:36.042][19][com.zwh.log4jtest.Storage][INFO]: producter int <<884, and list is [93].+.
[2014-03-27 23:36:37.057][17][com.zwh.log4jtest.Storage][INFO]: producter int <<418, and list is [93, 884].+.
[2014-03-27 23:36:38.072][17][com.zwh.log4jtest.Storage][INFO]: producter int <<323, and list is [93, 884, 418].+.
[2014-03-27 23:36:39.087][17][com.zwh.log4jtest.Storage][INFO]: producter int <<45, and list is [93, 884, 418, 323].+.
[2014-03-27 23:36:40.102][16][com.zwh.log4jtest.Storage][INFO]: consumer int is >>93, and list is [884, 418, 323, 45]...
[2014-03-27 23:36:21.832][9][com.zwh.log4jtest.Storage][INFO]: producter int <<92, and list is [534].+.
[2014-03-27 23:36:22.847][9][com.zwh.log4jtest.Storage][INFO]: producter int <<30, and list is [534, 92].+.
[2014-03-27 23:36:23.862][8][com.zwh.log4jtest.Storage][INFO]: consumer int is >>534, and list is [92, 30]...
[2014-03-27 23:36:24.877][8][com.zwh.log4jtest.Storage][INFO]: consumer int is >>92, and list is [30]...
[2014-03-27 23:36:25.892][10][com.zwh.log4jtest.Storage][INFO]: consumer int is >>30, and list is []...
[2014-03-27 23:36:26.907][27][com.zwh.log4jtest.Storage][INFO]: producter int <<30, and list is [].+.
[2014-03-27 23:36:27.922][25][com.zwh.log4jtest.Storage][INFO]: producter int <<783, and list is [30].+.
[2014-03-27 23:36:28.937][24][com.zwh.log4jtest.Storage][INFO]: consumer int is >>30, and list is [783]...
[2014-03-27 23:36:29.952][24][com.zwh.log4jtest.Storage][INFO]: consumer int is >>783, and list is []...
[2014-03-27 23:36:30.967][23][com.zwh.log4jtest.Storage][INFO]: producter int <<952, and list is [].+.
[2014-03-27 23:36:31.982][21][com.zwh.log4jtest.Storage][INFO]: producter int <<901, and list is [952].+.
[2014-03-27 23:36:32.997][21][com.zwh.log4jtest.Storage][INFO]: producter int <<93, and list is [952, 901].+.
[2014-03-27 23:36:34.012][20][com.zwh.log4jtest.Storage][INFO]: consumer int is >>952, and list is [901, 93]...
[2014-03-27 23:36:35.027][20][com.zwh.log4jtest.Storage][INFO]: consumer int is >>901, and list is [93]...
[2014-03-27 23:36:36.042][19][com.zwh.log4jtest.Storage][INFO]: producter int <<884, and list is [93].+.
[2014-03-27 23:36:37.057][17][com.zwh.log4jtest.Storage][INFO]: producter int <<418, and list is [93, 884].+.
[2014-03-27 23:36:38.072][17][com.zwh.log4jtest.Storage][INFO]: producter int <<323, and list is [93, 884, 418].+.
[2014-03-27 23:36:39.087][17][com.zwh.log4jtest.Storage][INFO]: producter int <<45, and list is [93, 884, 418, 323].+.
[2014-03-27 23:36:40.102][16][com.zwh.log4jtest.Storage][INFO]: consumer int is >>93, and list is [884, 418, 323, 45]...
代码:
package com.zwh.log4jtest; import java.util.LinkedList; import java.util.Random; import org.apache.log4j.LogManager; import org.apache.log4j.Logger; public class Storage { Logger logger = LogManager.getLogger(Storage.class); LinkedList<Integer> storage = new LinkedList<Integer>(); Random random = new Random(); public synchronized void consume() { if(storage.size() <= 0) { try { wait(); } catch (InterruptedException e) { logger.error(e.getMessage()); } } else { Integer i = storage.remove(); logger.info("consumer int is >>" + i + ", and list is " + storage + "..."); try { Thread.sleep(1000); } catch (InterruptedException e) { e.printStackTrace(); } notify(); } } public synchronized void product() { if(storage.size() >= 10) { try { wait(); } catch (InterruptedException e) { e.printStackTrace(); } } else { Integer i = random.nextInt(1000); logger.info("producter int <<" + i + ", and list is " + storage + ".+."); storage.add(i); try { Thread.sleep(1000); } catch (InterruptedException e) { e.printStackTrace(); } notify(); } } public static void main(String[] args) { Storage storage = new Storage(); for(int i = 0;i < 10;i ++) { Consumer consumer = new Consumer(storage); Producter producter = new Producter(storage); consumer.start(); producter.start(); } } } class Consumer extends Thread{ private Storage storage; public Consumer(Storage storage) { this.storage = storage; } @Override public void run() { while(true) { storage.consume(); } } } class Producter extends Thread{ private Storage storage; public Producter(Storage storage) { this.storage = storage; } @Override public void run() { while(true) { storage.product(); } } }
相关推荐
用进程同步方法解决“生产者-消费者”问题,C或C++语言实现。 1、设计目的 通过研究进程并发和信号量机制,实现生产者-消费者问题的并发控制。 2、设计要求 1)每个生产者和消费者对有界缓冲区进行操作后,即时显示...
SpringCloud-创建服务消费者-Ribbon方式示例代码,SpringCloud-创建服务消费者-Ribbon方式示例代码
SpringCloud-创建服务消费者-Feign方式示例代码,SpringCloud-创建服务消费者-Feign方式示例代码
示例-SAP物料主数据详解示例-SAP物料主数据详解示例-SAP物料主数据详解示例-SAP物料主数据详解示例-SAP物料主数据详解示例-SAP物料主数据详解示例-SAP物料主数据详解示例-SAP物料主数据详解示例-SAP物料主数据详解...
java多线程学习,生产者消费者问题示例
kafka-java-demo 基于java的kafka生产消费者示例。 mvn
最全的生产者消费者各种实现代码示例,参考学习
bcb_多线程示例,学习笔记 MutilThread(生产者与消费者) 线程协调工作示例
简单的Kafka消费者-生产者示例运行项目的步骤下载Kafka 0.10.0.0二进制文件cd kafka_2.11-0.10.0.0 运行zookeeper和kafka服务器bin/zookeeper-server-start.sh config/zookeeper.properties bin/kafka-server-start....
生产者消费者问题(英语:Producer-consumer problem),也称有限缓冲问题(英语:Bounded-buffer problem),是一个多线程同步问题的经典案例。该问题描述了两个共享固定大小缓冲区的线程——即所谓的“生产者”和...
生产者消费者模式java示例源码
EASY-UI示例EASY-UI示例EASY-UI示例EASY-UI示例EASY-UI示例EASY-UI示例EASY-UI示例EASY-UI示例EASY-UI示例EASY-UI示例EASY-UI示例EASY-UI示例
1-TreeView示例-拖放操作1-TreeView示例-拖放操作1-TreeView示例-拖放操作1-TreeView示例-拖放操作1-TreeView示例-拖放操作1-TreeView示例-拖放操作1-TreeView示例-拖放操作1-TreeView示例-拖放操作1-TreeView示例-...
NULL 博文链接:https://ruyi574812039.iteye.com/blog/2097988
Windows程序设计示例----------矩形
高管类工作分析示例-生产总监.doc
示例Golang Kafka消费者和生产者 设置 制片人 go run cmd/producer/main.go 消费者 标志: brokerList 话题 分区(默认值:0) offsetType messageCountStart(默认值:0) go run cmd/consumer/main.go ...
python多线程生产者和消费者代码示例
Dubbo生产者消费者示例源代码,Eclipse项目,基于Maven构建,可以直接导入Eclipse开发环境,本人亲测,编译通过,可以直接在Eclipse中运行(包含Main方法),先运行提供者,再运行生产者。