Advertisement
Guest User

Untitled

a guest
Dec 10th, 2019
134
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Groovy 2.82 KB | None | 0 0
  1. import com.groupstp.rtneo.entity.*;
  2. import com.haulmont.cuba.core.global.*;
  3. import com.groupstp.rtneo.service.*;
  4. import com.haulmont.cuba.core.sys.SecurityContext;
  5. import com.haulmont.cuba.core.sys.AppContext;
  6. import com.haulmont.cuba.core.sys.SecurityContextAwareRunnable
  7. import java.util.concurrent.*;
  8.  
  9. DataManager dataManager = AppBeans.get(DataManager.NAME);
  10.  
  11. final SecurityContext securityContext = AppContext.getSecurityContext();
  12.  
  13. System.out.println("================================================>>> START!!! <<<")
  14.  
  15. //Создается основной поток
  16. Runnable task = new Runnable() {
  17.    
  18.     public void run() {
  19.         //Получается securityContext. Нужен для выполнения потока от имени пользователя
  20.         AppContext.setSecurityContext(securityContext);
  21.        
  22.         System.out.println("MAIN THREAD " + Thread.currentThread().getName())
  23.        
  24.         System.out.println("INIT POOL")
  25.         //Инициализация пула с указанием количества потоков
  26.         ExecutorService executorService = Executors.newFixedThreadPool(2)
  27.        
  28.        
  29.         def list = []
  30.         for(def i=0; i<5; i++){
  31.             //Старт потока в методе
  32.             startExec(executorService, list)
  33.         }
  34.        
  35.         System.out.println("EXECUTOR SHUTDOWN")
  36.         //Обязательно закрываем пулл
  37.         executorService.shutdown()
  38.         //Максимальное время действия потока и проверка его окончания
  39.         //def done = executorService.awaitTermination(1, TimeUnit.MINUTES);
  40. //        System.out.println("awaitTermination done is "+done)
  41.     }
  42.  
  43. }
  44.  
  45. //Установка и запуск потока
  46. Thread thread = new Thread(task);
  47. thread.start();
  48.  
  49. System.out.println(">>> END!!! <<<")
  50.  
  51.  
  52. public void startExec(ExecutorService executorService, List<Object> list){
  53.     System.out.println("Start exec")
  54.     //Добавление потока в пулл с передачей securityContext
  55.     Future future = executorService.submit(new SecurityContextAwareRunnable({
  56.         try {
  57.             System.out.println("=== Start thread > " + Thread.currentThread().getName())
  58.             //Для удобства бизнес логика вынесена в отдельный метод
  59.             createContract(list)
  60.            
  61.         } catch (Exception e) {
  62.             log.error('Error creating entity', e)
  63.         }
  64.         System.out.println("=== End thread > " + Thread.currentThread().getName())
  65.     }))
  66.    
  67.     System.out.println("End exec")
  68. }
  69.  
  70. public void createContract(List<Object> list){
  71.     System.out.println("WORKING IN THREAD " + Thread.currentThread().getName())
  72.     Thread.sleep(1000)
  73. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement