package cn.cslg.pas.service.importPatent; import cn.cslg.pas.common.vo.ImportTaskAMVO; import cn.cslg.pas.domain.es.Patent; import cn.cslg.pas.service.common.FileManagerService; import org.springframework.beans.factory.annotation.Autowired; import java.io.IOException; import java.util.ArrayList; import java.util.Arrays; import java.util.List; import java.util.concurrent.locks.Condition; import java.util.concurrent.locks.Lock; import java.util.concurrent.locks.ReentrantLock; public class SavePatentToEsThread extends Thread { private List patents = new ArrayList<>(); private final Lock taskLock = new ReentrantLock(); private final Condition taskCondition = taskLock.newCondition(); private TaskThread taskThread; private Boolean ifProductAll= false; @Override public void run() { while (!ifProductAll||patents.size()>0) { try { //判断任务队列是否有任务,若没有则线程等待唤醒 if (patents.size() == 0) { taskLock.lock(); taskCondition.await(); } Thread.sleep(7000); Patent patent= patents.remove(0); System.out.println("patent"+patent.getPatentNo()+"done"); } catch (Exception e) { } } taskThread.awakeTaskThread(); } public SavePatentToEsThread(TaskThread taskThread) { this.taskThread=taskThread; } public void awakeTask(Patent patent) { patents.add(patent); if (taskLock.tryLock()) { //taskLock.lock(); taskCondition.signalAll(); taskLock.unlock(); } } public void setIfProductAll(Boolean ifProductAll){ this.ifProductAll=ifProductAll; } }