各位大神好,兽兽哥好:
我将具体的需求说一下:
一个外系统通过webservice的接口服务,请求接口,每请求一次,就执行里面的任务(具体的任务,目前已经解决)。关键我遇到的问题是:
因为要支持多并发的请求服务,所以需要用到线程池,我的想法是:限制线程池的线程数量(例如限制为10个),意思就是说最大同时执行10个任务,第11个请求就需要排队等待,所以接口服务需要返回{一个请求过多,请稍候的出参信息}。然后对于线程池的代码设计,我应该如何去弄?如何做到资源调度合理,不会发生内存溢出之类的?
注明:执行任务需要的时长是很久的,有可能是几分钟,有可能是几个小时都有可能。(毕竟任务的具体内容,是调用网络扫描工具去扫描网段,获取整个网段的信息)
请各位大神给我指导,谢谢。
7 回复
@Rekoe 可以提供一下伪代码吗?
```
protected final BlockingQueue queue = new LinkedBlockingQueue();
public void start(){
Thread t = new Thread(new Runnable() {
@Override
public void run() {
while (true) {
try {
MessageObject msg = queue.take();
//TODO 处理message
} catch (InterruptedException ex) {
log.errorf(ex.getMessage());
}
}
}
}, getClass().getName());
t.start();
}
public void addMessage(MessageObject message )
{
if(queue.size >=10){
return
}
queue.add(message);
}
@qq_6427b776
protected final BlockingQueue queue = new LinkedBlockingQueue();
public void start(){
Thread t = new Thread(new Runnable() {
@Override
public void run() {
while (true) {
try {
MessageObject msg = queue.take();
//TODO 处理message
} catch (InterruptedException ex) {
log.errorf(ex.getMessage());
}
}
}
}, getClass().getName());
t.start();
}
public void addMessage(MessageObject message )
{
if(queue.size >=10){
return
}
queue.add(message);
}
添加回复
请先登陆