package org.herac.tuxguitar.util; public class TGLock { private Object lock = new Object(); private Thread lockThread = null; public boolean isLocked() { return isLocked(Thread.currentThread()); } public boolean isLocked(Thread thread) { synchronized (this.lock) { return (this.lockThread != null && this.lockThread != thread); } } public void lock() { Thread thread = Thread.currentThread(); boolean lockSuccess = false; synchronized (this.lock) { if ((lockSuccess = !this.isLocked(thread))) { this.lockThread = thread; } } if (!lockSuccess) { while (isLocked(thread)) { Thread.yield(); } this.lock(); } } public void unlock() { synchronized (this.lock) { this.lockThread = null; } } }