Имам фиксирана група конец за планирана работа, сега имам само една зададена работа:
App.setSes(Executors.newScheduledThreadPool(1));
App.getSes().scheduleAtFixedRate(new SPCPollingTask(), 0, Integer.parseInt(SPCService.INSTANCE.getConfig("scheduleInterval")), TimeUnit.MINUTES);
Друга колона за асинхронни задачи:
App.setAes(Executors.newFixedThreadPool(10, new ThreadFactory(){
@Override
public Thread newThread(Runnable r) {
Thread thread = new Thread(r);
thread.setPriority(Thread.MIN_PRIORITY);
return thread;
}
}));
В SPCPollingTask
, Изпращам асинхронна задача по следния начин:
if(total > 50){
int i = 51;
long c = System.currentTimeMillis();
do{
App.getAes().submit(new Async1225Task(bdhm, ccxh, accountNo, subAccountNo, beginDate, endDate, i));
i = i + 50;
}while(i <= total);
long n = System.currentTimeMillis();
ARE.getLog().debug("[perf-hint]--submit task to AES takes " + StringUtil.formatLong((n-c), "#") + " ms");
}
По този начин очаквам планираната задача SPCPollingTask
винаги ще завършва много бързо, но на моя прозорец на компютъра, той свърши почти в края на цялата асинхронна задача. Качих кода си на сървър на Linux и получих по-добър резултат, но все още не е достатъчно добър.
Как мога да се уверя, че съм планиран SPCPollingTask
винаги ще свършат работа първо, асинхронните задачи могат да свършат работата си?
Аз ги пускам на Tomcat 6 с JDK6.
Отговори:
0 за отговор № 1Най - лесният начин точно сега, че ще изискванай-малкото манипулиране на кода ви е да добавите всички задачи за синхронизиране, генерирани в зададената задача, в списък и след това да ги изпратите всички в края на изпълнението на планираните задания.
Това лесно се прави:
В началото на твоя
run()
метод наSPCPollingTask
просто добаветеList<Task> tasks = new ArrayList<Task>(80);
Заменете всички
App.getAes().submit("any task goes here");
сtasks.add("any task goes here");
В края на метода на изпълнение
App.getAes().invokeAll(tasks);
Имайте предвид това invokeAll
блокира "", така че трябва да обмислите предаването на всички задачи в списъка с помощта на цикъл