相关代码
//一个小时后取出数据
@RequestMapping("/setTestTime")
public void setTestTime(HttpServletRequest request,HttpServletResponse response){
ServletContext servletContext = request.getServletContext();
ApplicationContext applicationContext = (ApplicationContext) servletContext.getAttribute("applicationContext");
FenPeiService s= (FenPeiService) applicationContext.getBean("fenPeiServiceId");
while (true){
try {
//先用5秒钟测量
Thread.sleep(5*1000);
System.out.println("测试时间到了,开始处理数据");
//把标记flag变为ture,以便把“毒丸”加入到队列中
flag=true;
while (true){
synchronized (waitLock){
//进行长耗时工作,开启多线程
System.out.println("完成IO等其他耗时工作");
//把biaoJi重新置为false
biaoJi=false;
//唤醒消费者线程
waitLock.notifyAll();
System.out.println("唤醒消费者.。。。。。。。。。。。。。。。。。");
break;
}
}
}
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
我的疑问
有这么个问题,现在我的消费者线程已经停下来了,下边这段代码是在唤醒消费者之前,先执行长耗时工作,但是我想开多个线程去做:但是只有一个线程能获取锁,在同步代码块中开多个线程,是不是就不行啊?
while (true){
synchronized (waitLock){
//进行长耗时工作,开启多线程
System.out.println("完成IO等其他耗时工作");
//把biaoJi重新置为false
biaoJi=false;
//唤醒消费者线程
waitLock.notifyAll();
System.out.println("唤醒消费者.。。。。。。。。。。。。。。。。。");
break;
}
}
}