能在同步块中开多个线程去做任务吗

相关代码

//一个小时后取出数据

@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;
                    }
                }
            }


阅读 660
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题