/** * Logback: the reliable, generic, fast and flexible logging framework. * Copyright (C) 1999-2013, QOS.ch. All rights reserved. * * This program and the accompanying materials are dual-licensed under * either the terms of the Eclipse Public License v1.0 as published by * the Eclipse Foundation * * or (per the licensee's choosing) * * under the terms of the GNU Lesser General Public License version 2.1 * as published by the Free Software Foundation. */ package ch.qos.logback.classic.issue.lbclassic135.lbclassic139; import java.util.Vector; import org.slf4j.Logger; import ch.qos.logback.classic.LoggerContext; import ch.qos.logback.core.contention.RunnableWithCounterAndDone; /** * * @author Olivier Cailloux * */ public class Worker extends RunnableWithCounterAndDone { static final int SLEEP_DUIRATION = 50; private Logger logger; private final Vector lock = new Vector(); final LoggerContext loggerContext; Worker(LoggerContext lc) { loggerContext = lc; logger = lc.getLogger(this.getClass()); } public void run() { print("entered run()"); while (!isDone()) { synchronized (lock) { sleep(); logger.info("lock the logger"); } } print("leaving run()"); } @Override public String toString() { print("In Worker.toString() - about to access lock"); synchronized (lock) { print("In Worker.toString() - got the lock"); //sleep(); final StringBuffer buf = new StringBuffer("STATUS"); return buf.toString(); } } public void sleep() { try { print("About to go to sleep"); Thread.sleep(SLEEP_DUIRATION); print("just woke up"); } catch (InterruptedException exc) { exc.printStackTrace(); } } void print(String msg) { String thread = Thread.currentThread().getName(); System.out.println("["+thread+"] "+msg); } }