GuardedSuspention(-)

xiaoxiao2026-09-14  12

GuardedSuspention模式主要思想是: 当条件不满足时,线程等待,直到条件满足时,等待该条件的线程被唤醒。 我们设计一个客户端线程和一个服务器线程,客户端线程不断发送请求给服务器线程,服务器线程不断处理请求。当请求队列为空时,服务器线程就必须等待,直到客户端发送了请求。 先定义一个请求队列:Queue package com.crackj2ee.thread; import java.util.*; public class Queue { private List queue = new LinkedList(); public synchronized Request getRequest() { while(queue.size()==0) { try { this.wait(); } catch(InterruptedException ie) { return null; } } return (Request)queue.remove(0); } public synchronized void putRequest(Request request) { queue.add(request); this.notifyAll(); } } 蓝色部分就是服务器线程的等待条件,而客户端线程在放入了一个request后,就使服务器线程等待条件满足,于是唤醒服务器线程。 客户端线程:ClientThread package com.crackj2ee.thread; public class ClientThread extends Thread { private Queue queue; private String clientName; public ClientThread(Queue queue, String clientName) { this.queue = queue; this.clientName = clientName; } public String toString() { return "[ClientThread-" + clientName + "]"; } public void run() { for(int i=0; i<100; i++) { Request request = new Request("" + (long)(Math.random()*10000)); System.out.println(this + " send request: " + request); queue.putRequest(request); try { Thread.sleep((long)(Math.random() * 10000 + 1000)); } catch(InterruptedException ie) { } } System.out.println(this + " shutdown."); } } 服务器线程:ServerThread package com.crackj2ee.thread; public class ServerThread extends Thread { private boolean stop = false; private Queue queue; public ServerThread(Queue queue) { this.queue = queue; } public void shutdown() { stop = true; this.interrupt(); try { this.join(); } catch(InterruptedException ie) {} } public void run() { while(!stop) { Request request = queue.getRequest(); System.out.println("[ServerThread] handle request: " + request); try { Thread.sleep(2000); } catch(InterruptedException ie) {} } System.out.println("[ServerThread] shutdown."); } }
转载请注明原文地址: https://www.6miu.com/read-5052659.html

最新回复(0)