1
2
3
4
5
6
7
8
9
10
11
12
13
14 package ch.qos.logback.classic.issue.lbclassic135.lbclassic139;
15
16 import org.slf4j.Logger;
17
18 import ch.qos.logback.classic.LoggerContext;
19 import ch.qos.logback.core.contention.RunnableWithCounterAndDone;
20
21
22
23
24
25
26 public class Worker extends RunnableWithCounterAndDone {
27 static final int SLEEP_DUIRATION = 50;
28
29 private Logger logger;
30 private final Object lock = new Object();
31
32 final LoggerContext loggerContext;
33
34 Worker(LoggerContext lc) {
35 loggerContext = lc;
36 logger = lc.getLogger(this.getClass());
37 }
38
39 public void run() {
40 print("entered run()");
41 while (!isDone()) {
42 synchronized (lock) {
43 sleep();
44 logger.info("lock the logger");
45 }
46 }
47 print("leaving run()");
48 }
49
50 @Override
51 public String toString() {
52 print("In Worker.toString() - about to access lock");
53 synchronized (lock) {
54 print("In Worker.toString() - got the lock");
55
56 return "STATUS";
57 }
58 }
59
60 public void sleep() {
61 try {
62 print("About to go to sleep");
63 Thread.sleep(SLEEP_DUIRATION);
64 print("just woke up");
65 } catch (InterruptedException exc) {
66 exc.printStackTrace();
67 }
68 }
69
70 void print(String msg) {
71 String thread = Thread.currentThread().getName();
72 System.out.println("[" + thread + "] " + msg);
73 }
74 }