Два классических способа: extends Thread и переопределить run(), или implements Runnable и передать в new Thread(runnable). Runnable лучше — не занимаешь наследование, можно использовать с пулами потоков. С Java 8 — лямбда: new Thread(() -> doWork()).start(). start() создаёт новый OS-поток и вызывает run(). Если вызвать run() напрямую — выполнится в текущем потоке. На практике напрямую Thread создают редко — используют ExecutorService для управления пулом.
Как создать и запустить поток в Java?
Junior
424 просмотровAFK Offer AI
Что такое generics в Java и зачем они нужны?