View Javadoc
1   /**
2    * Logback: the reliable, generic, fast and flexible logging framework.
3    * Copyright (C) 1999-2015, QOS.ch. All rights reserved.
4    *
5    * This program and the accompanying materials are dual-licensed under
6    * either the terms of the Eclipse Public License v1.0 as published by
7    * the Eclipse Foundation
8    *
9    *   or (per the licensee's choosing)
10   *
11   * under the terms of the GNU Lesser General Public License version 2.1
12   * as published by the Free Software Foundation.
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   * @author Olivier Cailloux
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              // sleep();
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  }