记录多线程使用hutool的问题
PS:目前不清楚到底是不是hutool的问题,并且使用的http代理也没有问题
当使用多线程调用HttpUtil来访问http阿里的某接口时,发现使用如果使用固定大小线程池Executors.newFixedThreadPool(4)
访问阿里某接口获取响应头中Set-Cookie里cna参数,则会出现每个线程之间获取到的cna不同(这是正常的and期望的),但是同一个线程调用这个接口会一直获取到相同的cna,就好像我通过hutool发送的http请求会暴露我线程ID或者别的身份一样
如果改为使用new Thread(() -> getCna()).start()
的话,线程是动态创建的,每次获取到的cna就不再出现重复的情况了
难道使用hutool的HttpUtil发送HTTP请求,这个线程会把什么响应的cookie放到ThreadLocal里?
首先我将发送http请求的代码改为使用CompletableFuture.supplyAsync
进行替换,一开始看起来好像没问题,但是这个底层好像也是由java自己维护的一个线程池实现的,最后多次使用某个线程调用这个接口的时候,问题又出现了
然后将项目中原本使用同一个线程发送http请求改为每次都创建新线程去执行之后,问题就解决了
我真是草了这个b问题折磨了我两天休息时间,以后再也不想用java写爬虫了