Los*_*oul 0 java multithreading
对不起,如果这是基本的,我只是没有看到答案.基本上我使用ThreadPoolExecutor运行几个线程来启动10个线程.我希望每个线程在其生命周期内与服务器建立自己的连接.是否有可能,如果可以,我在哪里放这个代码?
示例代码:
class DoWork implements Runnable{
protected String[] data = null;
public DoWork(String[] data) {
// get the data each thread needs to work
this.data = data;
}
public void run() {
// Do the work here
}
}
Run Code Online (Sandbox Code Playgroud)
我的理解是,如果工作队列中有项目,那么ThreadPoolExecutor使10个线程保持活动状态,并且当工作完成时,它们就会死亡.在这个结构的某处我可以添加连接信息吗?我不想在DoWork方法中这样做,因为这将为每个工作单元完成(因此在工作队列中打开多个项目的连接,可能是数千个并且在我尝试时导致超时).放入类声明和方法之间似乎没有做任何事情(虽然我可能做错了).
有关如何实现这一目标的任何想法?
更新:不是100%需要,但我很好奇是否还有一种方法可以让它在终止时做一些事情(也许所以我可以关闭与服务器的连接,而不是等待它超时).
您可以使用ThreadLocal存储每个线程的连接:
public class ConnectionProvider {
private static final ThreadLocal<Connection> threadLocalConnection =
new ThreadLocal<Connection>() {
@Override
protected Connection initialValue() {
// TODO create and return the connection
}
};
public static Connection getConnection() {
return threadLocalConnection.get();
}
}
Run Code Online (Sandbox Code Playgroud)
或者,如果可以通过多个线程(在不同时间)使用连接,则可以创建连接池.run方法将从池中获取连接(将动态创建它并将其添加到已创建的连接集中,无可用),并在完成使用后将其释放到池中(在finally块中).这将使连接可用于任何其他任务.这将具有使所需连接的数量可能低于线程池中的线程数的优点.
| 归档时间: |
|
| 查看次数: |
90 次 |
| 最近记录: |