如何确保使用者获取数据并正确退出线程?

时间:2019-03-12 03:22:22

标签: java

现在,第一

  1. 在最外层具有Quartz,并且每N秒执行一次
  2. 拥有一个ThreadPoolExcetuor,2个coresize,2个maxsize
  3. 在ThreadPoolExcetuor中,有1个线程执行Product(),有1个线程执行Consume()
  4. Product()的数据由MessageQueue存储

所以,我的问题:

  1. 如何确保消费者正确获得了Product()s data and Consume()线程?

我试图做一个错误的方法:在执行Consume()的线程中设置while(true),但是Quartz只执行2次,并且ThreadPoolExcetuor已满。填充代码:

    public class TestTask extends QuartzJobBean {

    private static ThreadPoolExecutor threadPoolExecutor = new ThreadPoolExecutor(
            2,
            2,
            60,
            TimeUnit.SECONDS,
            new LinkedBlockingDeque<>(4));

    @Override
    protected void executeInternal(JobExecutionContext jobExecutionContext) {
        threadPoolExecutor.execute(() -> {
            //Product()

            //data is stored by MessageQueue
        });
        threadPoolExecutor.execute(() -> {
            while (true) {
                //Consume()
            }
        });
    }
    }

0 个答案:

没有答案