Java輪詢和觸發是指一種消息傳遞機制,它可以讓一個線程等待另一個線程的完成,或者等待某個事件的觸發。Java提供了多種方式來實現輪詢和觸發。
public class WaitForThread extends Thread {
private final Object lock;
private boolean done = false;
public WaitForThread(Object lock) {
this.lock = lock;
}
public void run() {
synchronized (lock) {
while (!done) {
try {
lock.wait();
} catch (InterruptedException ie) {
// Handle interruption.
}
}
}
}
public void setDone() {
synchronized (lock) {
done = true;
lock.notify();
}
}
}
上面的代碼演示了通過使用Object.wait()和Object.notify()方法實現輪詢和觸發機制的方式,其中WaitForThread類等待某個線程調用setDone方法把done屬性設置為true,然后喚醒等待線程。
public class Executor {
private final BlockingQueuetaskQueue;
private final Thread[] threads;
public Executor(int nThreads) {
taskQueue = new LinkedBlockingQueue<>();
threads = new Thread[nThreads];
for (int i = 0; i< nThreads; i++) {
threads[i] = new Thread(new WorkerTask());
threads[i].start();
}
}
public void execute(Runnable task) {
taskQueue.offer(task);
}
private class WorkerTask implements Runnable {
public void run() {
while (true) {
Runnable task;
try {
task = taskQueue.take();
} catch (InterruptedException e) {
// Handle interruption.
continue;
}
task.run();
}
}
}
}
上述示例展示了使用BlockingQueue來實現輪詢和觸發機制。這種機制會創建一個線程池,使用BlockingQueue來保存傳遞給它的任務,然后有一個或多個線程從隊列中取出任務并執行。
總之,Java提供了多種不同的機制來實現輪詢和觸發,每種機制的實現都有其優點和缺點,應根據需要選擇適合的方法。
上一篇java讀取和寫入文本