代码在公司内网,没有办法发出来。
我把程序流程的伪代码发出来,请大佬帮忙解决问题。谢谢。
//信号量控制并发
private Semaphore semaphore=new Semaphore(4);
public void run(){
for(int i=0;i<3600;i++){
获取一个信号量
singleJob();
}
}
@Async
public void singleJob(){
try{
User user=new User ();
//将User设置入 ThreadLocal
method1();
method2();
method3();
//取出User存入数据库。
}cache(Exception e){
}finally{
//释放信号量
//清空ThreadLocal中设置的 User
}
}
声明:@Async注解生效了 是多线程。
我在singleJob里创建了一个User对象(举例而已),放进了ThreadLocal,在下面的三个方法中都从ThreadLocal中先取出user,然后设置user的一个属性再放入 ThreadLocal中。
在finally块中从线程中移除。
程序每次执行都至少会抛出1-2次ConcurrentModificationException。