可能重複:
Testing a multithreaded Java class that runs the threads sequentially關於創建同步機制
請不要把這個問題下面爲重複的一個..!
我開發了一個讓多線程按順序依次運行的類。這個類的claimAccess函數和release Access函數之間的所有應用程序代碼一次只能在一個線程中執行。所有其他線程將在隊列中等待,直到前一個線程完成。請告知我想通過在main()方法本身寫入一段代碼來測試我的類。現在
import java.util.ArrayList;
import java.util.List;
public class AccessGate {
protected boolean shouldWait = false;
protected final List waitThreadQueue = new ArrayList();
/**
* For a thread to determine if it should wait. It it is, the thread will
* wait until notified.
*
*/
public void claimAccess() {
final Thread thread = getWaitThread();
if (thread != null) {
// let the thread wait untill notified
synchronized (thread) {
try {
thread.wait();
} catch (InterruptedException exp) {
}
}
}
}
/**
* For a thread to determine if it should wait. It it is, the thread will be
* put into the waitThreadQueue to wait.
*
*/
private synchronized Thread getWaitThread() {
Thread thread = null;
if (shouldWait || !waitThreadQueue.isEmpty()) {
thread = Thread.currentThread();
waitThreadQueue.add(thread);
}
shouldWait = true;
return thread;
}
/**
* Release the thread in the first position of the waitThreadQueue.
*
*/
public synchronized void releaseAccess() {
if (waitThreadQueue.isEmpty()) {
shouldWait = false;
} else {
shouldWait = true;
// give the claimAccess function a little time to complete
try {
Thread.sleep(10);
} catch (InterruptedException exp) {
}
// release the waiting thread
final Thread thread = (Thread) waitThreadQueue.remove(0);
synchronized (thread) {
thread.notifyAll();
}
}
}
}
我的主要方法是..
public static void main (String args[])
{
}
請告知我如何在我的我的主要測試上面的類方法釀出THR線程.. !!請大家指教
請考慮使用'Executors.newSingleThreadExecutor()' – hoaz
@Hoaz非常感謝,請發佈完整的代碼,以便我能夠理解更多,謝謝 – user1881169