java併發編程之Guarded Suspention

當客戶端請求速度遠遠大於服務端的處理速度,這時候就非常適合使用Guarded Suspention模式

package cn.fcl.guardendSuspension;
import java.util.ArrayList;
import java.util.List;
public class RequestQueue {
private List<Integer> integers = new ArrayList<Integer>();
public synchronized Integer get() {
if(integers.size() == 0) {
try {
wait();
} catch (InterruptedException e) {
}
}
return integers.remove(0);
}
public synchronized void add(Integer i) {
integers.add(i);
notify();
}
}
package cn.fcl.guardendSuspension;
public class Client extends Thread {
private RequestQueue queue;
public Client(RequestQueue queue) {
super();
this.queue = queue;
}
public void run() {
for(int i = 0; i < 10; i++) {
queue.add(i);
}
System.out.println("請求完畢");
}
}
package cn.fcl.guardendSuspension;
public class Server extends Thread{
private RequestQueue queue;
public Server(RequestQueue queue) {
this.queue = queue;
}
@Override
public void run() {
while(true) {
Integer i = queue.get();
System.out.println(i + "已經處理");
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
}
package cn.fcl.guardendSuspension;
public class main {
public static void main(String[] args) {
RequestQueue queue = new RequestQueue();
new Client(queue).start();
new Server(queue).start();
}
}
 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章