|
|||||||
Чистый пул потоков
Время создания: 06.12.2019 09:59
Раздел: INFO - Development - CUBA
Запись: wwwlir/Tetra/master/base/15755373040c0eq86ilh/text.html на raw.githubusercontent.com
|
|||||||
|
|||||||
import com.groupstp.rtneo.entity.*; import com.haulmont.cuba.core.global.*; import com.groupstp.rtneo.service.*; import com.haulmont.cuba.core.sys.SecurityContext; import com.haulmont.cuba.core.sys.AppContext; import com.haulmont.cuba.core.sys.SecurityContextAwareRunnable import java.util.concurrent.*; DataManager dataManager = AppBeans.get(DataManager.NAME); final SecurityContext securityContext = AppContext.getSecurityContext(); System.out.println("================================================>>> START!!! <<<") //Создается основной поток Runnable task = new Runnable() {
public void run() { //Получается securityContext. Нужен для выполнения потока от имени пользователя AppContext.setSecurityContext(securityContext);
System.out.println("MAIN THREAD " + Thread.currentThread().getName())
System.out.println("INIT POOL") //Инициализация пула с указанием количества потоков ExecutorService executorService = Executors.newFixedThreadPool(2)
def list = [] for(def i=0; i<5; i++){ //Старт потока в методе startExec(executorService, list) }
System.out.println("EXECUTOR SHUTDOWN") //Обязательно закрываем пулл executorService.shutdown() //Максимальное время действия потока и проверка его окончания //def done = executorService.awaitTermination(1, TimeUnit.MINUTES); // System.out.println("awaitTermination done is "+done) } } //Установка и запуск потока Thread thread = new Thread(task); thread.start(); System.out.println(">>> END!!! <<<") public void startExec(ExecutorService executorService, List<Object> list){ System.out.println("Start exec") //Добавление потока в пулл с передачей securityContext Future future = executorService.submit(new SecurityContextAwareRunnable({ try { System.out.println("=== Start thread > " + Thread.currentThread().getName()) //Для удобства бизнес логика вынесена в отдельный метод createContract(list)
} catch (Exception e) { log.error('Error creating entity', e) } System.out.println("=== End thread > " + Thread.currentThread().getName()) }))
System.out.println("End exec") } public void createContract(List<Object> list){ System.out.println("WORKING IN THREAD " + Thread.currentThread().getName()) Thread.sleep(1000) } |
|||||||
Так же в этом разделе:
|
|||||||
|
|||||||
|