Callable в Java

До этого мы рассматривали создание потоков с помощью Thread и Runnable. Последний вариант того как можно создать класс потока это реализовать Callable.

Callable – как Runnable, только вместо run() – call(), который может возвращать значение, то есть благодаря call поток может вернуть значение.

FutureTaskдля взаимодействия с потоками. Он для получения результата выполнения потока (того, что вернет call), еще имеет методы проверки состояния потока.

С помощью метода get() класса FutureTask можно получить результат выполнения потока когда он завершит свое выполнение.

get() блокирует поток, в котором он был вызван пока не выполниться поток переданный в объект FutureTask.

Из также важных методов – с помощью isDone() можем проверить завершился ли уже поток или еще нет.

Пример программы:

import java.io.*; import java.util.*; import java.util.concurrent.Callable; import java.util.concurrent.FutureTask; class CallableFutureExample { public static void main(String[] args) throws Exception { FutureTask futTask = new FutureTask(new MyCallable()); Thread t = new Thread(futTask); t.start(); //main останавливается и get ждет пока //нить t не выполнится и после этого //возвращает значение метода call. System.out.println(“Counter: ” + futTask.get()); } } class MyCallable implements Callable { public Integer call() throws Exception { Integer j=0; try { for (int i = 0; i < 5; i++) { j++; System.out.println("j = " + j); Thread.sleep(1000); } } catch(Exception e) { return j; //возвращаем j, который //будет помещен в FutureTask } return j; } }

Вывод:

Как видим, get остановил мейн пока выполнялся поток t и когда t выполнился, мейн снова запустился и вывел Counter: 5

ExecutorService: управление пулом потоков

Изучите ExecutorService в Java для эффективного управления пулом потоков. Уменьшайте накладные расходы, переиспользуя потоки в многопоточных приложениях.
Time to read: 15

ReadWriteLock в Java

Узнайте, как ReadWriteLock в Java разделяет блокировки на чтение и запись. Оптимизируйте многопоточный доступ к ресурсам с примерами кода и объяснениями.
Time to read: 15

ThreadLocal в Java: переменные потока

ThreadLocal в Java: создавайте потокобезопасные переменные, уникальные для каждого потока. Пример использования и работа с потоконебезопасными объектами.
Time to read: 16