threadpool的使用

本文探讨了在项目中遇到的大规模数据批量处理需求,并通过使用多线程提高处理效率。介绍了threadpool和CountDownLatch的应用场景及实现原理,讨论了线程间变量共享的问题。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

    最近在项目中碰到一个这样的需求,需要对约50条以上的数据,做批量处理。而每条数据的处理,都需要远程调用一次接口。因此想到了使用多线程来完成。

     对多线程没有太多的经验,参考一下他人的代码和设计

     1.threadpool

     2. java.util.concurrent.CoutDownLatch

 

可以参考例子http://docs.oracle.com/javase/1.5.0/docs/api/java/util/concurrent/CountDownLatch.html

 

 

 

这个例子中,有个疑惑,在driver中,startSignal和doneSignal
  是作为method的形式参数传递给另外一个线程worker的。

在例子中,可以看到在driver中,修改startSignal,worker中的startSignal同样会受到影响。

这样就有了疑问,startsignal 其实是作为thread的私有变量的,这样,应该是driver线程和worker线程各维持一份的。但是在例子中的情况,是因为

1.传递的是对象,所以实际传递的是地址?

这样的现象一般在调用函数式,传入形参为对象时发生。对目标对象进行修改,内存中的数据也会改变,使得原始对象中的值也发生改变。但是一般大家都不提倡这样做,而在源码中发生这种情况,不太可能。

另外,此处传递参数的方式,不是原始对象,传递给内部的某个mothod,而是传递给另外一个线程。。。

写个代码验证一下,在线程中传递对象是否和以method方式传递对象类的形参一样。

 

2.A synchronization aid  ???

 

 

 【valotile,sycnonized】

CoutDownLatch is  an A synchronization aid.

await 

    

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值