小编Tro*_*ota的帖子

ExecutorService,如何知道所有线程何时完成而不阻塞主线程?

我有一个多线程实现,我创建一个ExecutorService并提交要执行的任务,我想知道所有线程被提交的时间已经完成而没有阻塞主线程和UI.我试过ExecutorService.awaitTermination()但它阻止了主线程和UI.我搜索了很多,但我似乎无法找到一种优雅的方式来做到这一点.我正在考虑创建另一个线程来计算完成的线程数量,并在它们全部完成时启动一个事件,但这不是一个好方法,我想要一个更好的解决方案!

java swing multithreading executorservice

6
推荐指数
2
解决办法
7286
查看次数

Java HttpClient 似乎正在缓存内容

我正在构建一个简单的网络爬虫,我需要获取同一个页面几百次,并且页面中有一个动态属性,应该在每次请求时更改。我已经构建了一个基于多线程 HttpClient 的类来处理请求,我正在使用 anExecutorService来创建线程池并运行线程。问题是动态属性有时不会在每个请求上改变,我最终会在 3 或 4 个后续线程上获得相同的值。我已经阅读了很多关于 HttpClient 的文章,但我真的找不到这个问题的来源。可能是关于缓存的东西,或者类似的东西!?

更新:这是在每个线程中执行的代码:

HttpContext localContext = new BasicHttpContext();

HttpParams params = new BasicHttpParams();
HttpProtocolParams.setVersion(params, HttpVersion.HTTP_1_1);
HttpProtocolParams.setContentCharset(params,
        HTTP.DEFAULT_CONTENT_CHARSET);
HttpProtocolParams.setUseExpectContinue(params, true);

ClientConnectionManager connman = new ThreadSafeClientConnManager();

DefaultHttpClient httpclient = new DefaultHttpClient(connman, params);

HttpHost proxy = new HttpHost(inc_proxy, Integer.valueOf(inc_port));
httpclient.getParams().setParameter(ConnRoutePNames.DEFAULT_PROXY,
        proxy);

HttpGet httpGet = new HttpGet(url);
httpGet.setHeader("User-Agent",
        "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1)");

String iden = null;
int timeoutConnection = 10000;
HttpConnectionParams.setConnectionTimeout(httpGet.getParams(),
        timeoutConnection);

try {

    HttpResponse response = httpclient.execute(httpGet, localContext);

    HttpEntity entity …
Run Code Online (Sandbox Code Playgroud)

java multithreading get http httpclient

5
推荐指数
2
解决办法
8429
查看次数

标签 统计

java ×2

multithreading ×2

executorservice ×1

get ×1

http ×1

httpclient ×1

swing ×1