提交 7d7e4fb4 编写于 作者: 武汉红喜's avatar 武汉红喜

concurrent test

上级 3abb6823
package org.hongxi.java.util.concurrent.sync;
/**
* @author shenhongxi 2019/8/11
*/
public class Consumer implements Runnable {
private WorkStack stack;
private String name;
public Consumer(WorkStack stack, String name) {
this.stack = stack;
this.name = name;
}
public String getName() {
return name;
}
@Override
public void run() {
for (int i = 0; i < 60; i++) {
Work work = stack.pop();
System.out.println(getName() + "消费" + work);
try {
Thread.sleep((long) (Math.random() * 400));
} catch (InterruptedException e) {}
}
}
}
package org.hongxi.java.util.concurrent.sync;
/**
* @author shenhongxi 2019/8/11
*/
public class Main {
public static void main(String[] args) {
WorkStack stack = new WorkStack();
new Thread(new Producer(stack, "p1")).start();
new Thread(new Consumer(stack, "c1")).start();
new Thread(new Producer(stack, "p2")).start();
new Thread(new Consumer(stack, "c2")).start();
}
}
package org.hongxi.java.util.concurrent.sync;
/**
* @author shenhongxi 2019/8/11
*/
public class Producer implements Runnable {
private WorkStack stack;
private String name;
public Producer(WorkStack stack, String name) {
this.stack = stack;
this.name = name;
}
public String getName() {
return name;
}
@Override
public void run() {
for (int i = 0; i < 60; i++) {
Work work = new Work(i);
stack.push(work);
System.out.println(getName() + "生产" + work);
try {
Thread.sleep((long) (Math.random() * 100));
} catch (InterruptedException e) {}
}
}
}
package org.hongxi.java.util.concurrent.sync;
/**
* @author shenhongxi 2019/8/11
*/
public class Work {
private int id;
public Work(int id) {
this.id = id;
}
public int getId() {
return id;
}
@Override
public String toString() {
return "Work" + getId();
}
}
package org.hongxi.java.util.concurrent.sync;
/**
* @author shenhongxi 2019/8/11
*/
public class WorkStack {
private int index = 0;
private Work[] works = new Work[6];
public synchronized void push(Work work) {
while (index == works.length) {
try {
this.wait();
} catch (InterruptedException e) {}
}
this.notifyAll();
works[index++] = work;
}
public synchronized Work pop() {
while (index == 0) {
try {
this.wait();
} catch (InterruptedException e) {}
}
this.notifyAll();
return works[--index];
}
}
......@@ -32,7 +32,7 @@
<maxFileSize>10MB</maxFileSize>
</triggeringPolicy>
<encoder>
<pattern>%d{yyy-MM-dd HH:mm:ss,GMT+8} %p %t - %m%n</pattern>
<pattern>%d{yyy-MM-dd HH:mm:stack,GMT+8} %p %t - %m%n</pattern>
<charset class="java.nio.charset.Charset">UTF-8</charset>
</encoder>
</appender>
......
<configuration debug="false">
<appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
<encoder>
<pattern>%d{HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n</pattern>
<pattern>%d{HH:mm:stack.SSS} [%thread] %-5level %logger{36} - %msg%n</pattern>
</encoder>
</appender>
......
......@@ -11,7 +11,7 @@
<ThresholdFilter level="DEBUG" onMatch="ACCEPT"
onMismatch="DENY"/>
</Filters>
<PatternLayout pattern="[%d{yyyy-MM-dd HH:mm:ss:SSS}] [%p] [%t] - [%X{sid}] %c{1.} - %m%n"/>
<PatternLayout pattern="[%d{yyyy-MM-dd HH:mm:stack:SSS}] [%p] [%t] - [%X{sid}] %c{1.} - %m%n"/>
</console>
<RollingFile name="RollingFileDebug" fileName="${log.path}/debug.log"
......@@ -22,7 +22,7 @@
<ThresholdFilter level="DEBUG" onMatch="ACCEPT"
onMismatch="DENY"/>
</Filters>
<PatternLayout pattern="[%d{yyyy-MM-dd HH:mm:ss:SSS}] [%p] [%t] - [%X{sid}] %c{1.} - %m%n"/>
<PatternLayout pattern="[%d{yyyy-MM-dd HH:mm:stack:SSS}] [%p] [%t] - [%X{sid}] %c{1.} - %m%n"/>
<Policies>
<TimeBasedTriggeringPolicy/>
<SizeBasedTriggeringPolicy size="100 MB"/>
......@@ -36,7 +36,7 @@
<ThresholdFilter level="WARN" onMatch="DENY"
onMismatch="NEUTRAL"/>
</Filters>
<PatternLayout pattern="[%d{yyyy-MM-dd HH:mm:ss:SSS}] [%p] [%t] - [%X{sid}] %c{1.} - %m%n"/>
<PatternLayout pattern="[%d{yyyy-MM-dd HH:mm:stack:SSS}] [%p] [%t] - [%X{sid}] %c{1.} - %m%n"/>
<Policies>
<TimeBasedTriggeringPolicy/>
<SizeBasedTriggeringPolicy size="100 MB"/>
......@@ -50,7 +50,7 @@
<ThresholdFilter level="ERROR" onMatch="DENY"
onMismatch="NEUTRAL"/>
</Filters>
<PatternLayout pattern="[%d{yyyy-MM-dd HH:mm:ss:SSS}] [%p] [%t] - [%X{sid}] %c{1.} - %m%n"/>
<PatternLayout pattern="[%d{yyyy-MM-dd HH:mm:stack:SSS}] [%p] [%t] - [%X{sid}] %c{1.} - %m%n"/>
<Policies>
<TimeBasedTriggeringPolicy/>
<SizeBasedTriggeringPolicy size="100 MB"/>
......@@ -60,7 +60,7 @@
<RollingFile name="RollingFileError" fileName="${log.path}/error.log"
filePattern="${log.path}/$${date:yyyy-MM-dd}/error-%d{yyyy-MM-dd}-%i.log">
<ThresholdFilter level="ERROR"/>
<PatternLayout pattern="[%d{yyyy-MM-dd HH:mm:ss:SSS}] [%p] [%t] - [%X{sid}] %c{1.} - %m%n"/>
<PatternLayout pattern="[%d{yyyy-MM-dd HH:mm:stack:SSS}] [%p] [%t] - [%X{sid}] %c{1.} - %m%n"/>
<Policies>
<TimeBasedTriggeringPolicy/>
<SizeBasedTriggeringPolicy size="100 MB"/>
......@@ -70,7 +70,7 @@
<RollingFile name="RollingFileTrace" fileName="${log.path}/trace.log"
filePattern="${log.path}/$${date:yyyy-MM-dd}/trace-%d{yyyy-MM-dd}-%i.log">
<ThresholdFilter level="TRACE" onMatch="ACCEPT" onMismatch="DENY"/>
<PatternLayout pattern="[%d{yyyy-MM-dd HH:mm:ss:SSS}] [%p] [%t] - [%X{sid}] %c{1.} - %m%n"/>
<PatternLayout pattern="[%d{yyyy-MM-dd HH:mm:stack:SSS}] [%p] [%t] - [%X{sid}] %c{1.} - %m%n"/>
<Policies>
<TimeBasedTriggeringPolicy/>
<SizeBasedTriggeringPolicy size="100 MB"/>
......@@ -78,7 +78,7 @@
</RollingFile>
<File name="UserService" fileName="${log.path}/user-service.log">
<PatternLayout pattern="%d{HH:mm:ss.SSS} [%t] %-5level %logger{36} - %msg%n" />
<PatternLayout pattern="%d{HH:mm:stack.SSS} [%t] %-5level %logger{36} - %msg%n" />
</File>
</appenders>
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册