Advertisement
Tvor0zhok

TimeoutException

Mar 14th, 2023 (edited)
667
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 2.36 KB | None | 0 0
  1. import java.util.concurrent.*;
  2. import java.util.concurrent.atomic.AtomicBoolean;
  3.  
  4. // Задача, которую рабочий поток должен выполнить
  5. class MyTask implements Callable<Integer>
  6. {
  7.     int x, y;
  8.     MyTask(int a, int b) { x = a; y = b; }
  9.    
  10.     // Неэффективная реализация алгоритма Евклида
  11.     // поиска НОДа чисел x и y
  12.     @Override
  13.     public Integer call()
  14.     {
  15.         // Убедимся в том, что этот участок кода выполняется рабочим потоком
  16.         System.out.printf("call метод, поток: %s\n", Thread.currentThread().getName());
  17.        
  18.         while (x != 0 && y != 0)
  19.         {
  20.             if (x > y) x -= y;
  21.             else y -= x;
  22.         }
  23.        
  24.         if (x > 0) return x;
  25.         else return y;
  26.     }
  27. }
  28.  
  29. public class Main
  30. {
  31.     public static void main(String[] args)
  32.     {
  33.         // Два потока: главный и рабочий
  34.         ExecutorService threadPool = Executors.newSingleThreadExecutor();
  35.        
  36.         // Убедимся в том, что этот участок кода выполняется главным потоком
  37.         System.out.printf("main метод, поток: %s\n", Thread.currentThread().getName());
  38.        
  39.         // Задача, которую должен выполнить рабочий поток
  40.         final Future<?> future = threadPool.submit(new MyTask(1000000000, 1));
  41.        
  42.         try
  43.         {
  44.            // Даем право на решение задачи ровно 1 секунду
  45.            System.out.printf("Ответ: %d\n", future.get(1, TimeUnit.SECONDS));
  46.         }
  47.         catch (TimeoutException e)
  48.         {
  49.             // Обрабатываем случай, когда задача выполняется дольше 1 секунды
  50.             System.out.println("Превышено время ожидания :(");
  51.             future.cancel(true);
  52.         }
  53.         catch (InterruptedException | ExecutionException e)
  54.         {
  55.             // Обрабатываем случай, когда рабочий поток приостановил работу, хотя не должен был
  56.             System.out.println("Назапланированное прерывание работы рабочего потока 0_0");
  57.         }
  58.        
  59.         // Завершение работы потоков
  60.         threadPool.shutdown();
  61.     }
  62. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement