package com.thread;
public class Request {
private String name;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
@Override
public String toString() {
return "Request [name=" + name + "]";
}
}
package com.thread;
public interface RequestProcessor {
//处理请求
void processorRequest(Request request);
}
package com.thread;
import java.util.concurrent.LinkedBlockingQueue;
public class PrintProcessor extends Thread implements RequestProcessor{
//阻塞队列
LinkedBlockingQueue<Request> linkedBlockingQueue = new LinkedBlockingQueue();
private final RequestProcessor nextProcessor;
public PrintProcessor(RequestProcessor nextProcessor){
this.nextProcessor = nextProcessor;
}
@Override
public void run(){
//线程如何去运用
while(true){
Request request;
try {
request = linkedBlockingQueue.take();
System.out.println("print data:" + request);
nextProcessor.processorRequest(request);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
//把当前的请求放到队列里面
@Override
public void processorRequest(Request request) {
linkedBlockingQueue.add(request);
}
}
package com.thread;
import java.util.concurrent.LinkedBlockingQueue;
public class SaveProcessor extends Thread implements RequestProcessor{
//阻塞队列
LinkedBlockingQueue<Request> linkedBlockingQueue = new LinkedBlockingQueue();
@Override
public void run(){
while(true){
Request request;
try {
request = linkedBlockingQueue.take();
System.out.print("save data:" + request);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
//把当前的请求放到队列里面
@Override
public void processorRequest(Request request) {
linkedBlockingQueue.add(request);
}
}
package com.thread;
public class Demo {
PrintProcessor printPorcessor;
public Demo(){
SaveProcessor saveProcessor = new SaveProcessor();
saveProcessor.start();
printPorcessor = new PrintProcessor(saveProcessor);
printPorcessor.start();
}
public static void main(String[] args){
//zookeeper思想 异步(中间件)
Request request = new Request();
request.setName("mike");
new Demo().doTest(request);
}
public void doTest(Request request){
printPorcessor.processorRequest(request);
}
}
运行结果如下:
print data:Request [name=mike]
save data:Request [name=mike]