Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- 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)
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement