最近在项目中碰到一个这样的需求,需要对约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