Какими способами можно создать потоки в Java?



В Java доступны три варианта создания потока из класса - расширить класс Thread либо реализовать интерфейсы Callable или Runnable.



При использовании Thread мы запускаем поток методом start(), а описываем логику выполнения в методе run().



При использовании Runnable мы должны вызвать метод run(), а у Callable - метод call(). Так как и Runnable и Callable - интерфейсы, мы определим логику выполнения внутри их методов(Runnable и Callable являются функциональными интерфейсами которые имеют только один метод - run() и call() соответственно). Разница в этих двух интерфейсов в том что Callable возвращает результат.