类中开启了两个子线程,运行在zhuYe()方法中,
第一个问题是:在tomcat中,有没有必要加同步关键字?
我认为,这个方法运行在不同线程的线程栈中,互相隔离;没有必要加关键字;但是我又但心,该方法中的两个子线程在并发下互相影响,所以加了同步关键子
第二个问题是:在代码的最下方为了等待子线程1和子线程2都运行完成后,在进行后续的操作,我在这里运用了while()循环不停的去检查其中的条件,但是我又感觉这样做会降低系统的性能,不知到还有啥好的方法没?
我认为,一开始我想用消费者生产者模式来做,但是这里是需要同时等待2个子线程完成,不知道该如何做??
谢谢!!
public class yuanDanWeiController {
private static final Object object = new Object();
@RequestMapping("/zhuYe")
public void zhuYe(HttpServletRequest request, HttpServletResponse response) {
synchronized (object) {
//子线程1
Callable<List<YuanDanWei>> callableList = new Callable<List<YuanDanWei>>() {
@Override
public List<YuanDanWei> call() throws Exception {
List<YuanDanWei> l = ys.searchPage(suoYin, pageBean.getRows(), FENZU);
return l;
}
};
Future<List<YuanDanWei>> listFuture = executorService.submit(callableList);
list = listFuture.get();
//子线程2
Callable<Integer> callable = new Callable<Integer>() {
@Override
public Integer call() throws Exception {
return ys.daoCount(FENZU);
}
};
Future<Integer> Intfuture = executorService.submit(callable);
count = Intfuture.get();
//循环判断等待两个线程执行
while ((count == 0 && list.size() == 0) || (count != 0 && list.size() != 0) || list.size() == 0) {
}
}
}
}
问题1,看这个zhuYe()方法里面有没有使用到共享资源量。加锁目的是为了同一时刻,只有一个线程占用共享资源
问题2,使用 CountDownLatch 或者 CompletableFuture