Потоки в Java
Потоки в Java – це механізм, який дозволяє виконувати декілька завдань одночасно в одному процесі. Вони особливо корисні для програм, які потребують паралельного виконання задач, таких як обробка великих обсягів даних, обслуговування багатокористувацьких систем або робота з мережевими з'єднаннями.
Потік (Thread) – це окремий шлях виконання в межах програми. Кожен потік має свій власний стек викликів, але розділяє спільну пам'ять з іншими потоками в межах одного процесу.
Способи стверення
- Успадкування класу
Thread
та перевизначити методrun()
:class MyThread extends Thread { public void run() { System.out.println("Потік працює!"); } }
- Реалізувати інтерфейс
Runnable
та перевизначити методrun()
:class MyRunnable implements Runnable { public void run() { System.out.println("Потік працює"); } }
- Використати лямбда-вирази (Java 8+):
Thread thread = new Thread(() -> System.out.println("Потік працює"));
Методи для керування потоками
start()
- запускає потік, викликаючи методrun()
sleep()
- призупиняє виконання потоку на заданий часjoin()
- очікує завершення іншого потоку
Приклад програми з трьома потоками:
public class Main extends Thread {
@Override
public void run(){
for(int i=0; i<20 ;i++){
printMsg();
}
}
public static void main(String[] args) {
Main object = new Main();
object.start();
Thread tread = new Thread(){
public void run(){
for(int i=0; i<20 ;i++){
printMsg();
}
}
};
tread.start();
for(int i=0;i<20;i++){
printMsg();
}
}
private static void printMsg(){
Thread t = Thread.currentThread();
String name = t.getName();
System.out.println(name);
}
}
Приблизний результат роботи (порядом може бути іншим):
main main main main Thread-0 Thread-0 Thread-0 Thread-0 Thread-0 Thread-0 Thread-0 Thread-0 Thread-1 Thread-1 Thread-1 Thread-1 Thread-1 Thread-1 Thread-1 Thread-1 Thread-1 Thread-1 main main main main main main main main Thread-0 Thread-0 Thread-0 Thread-0 Thread-0 Thread-0 Thread-0 Thread-0 Thread-0 Thread-0 Thread-0 Thread-1 Thread-1 Thread-1 Thread-1 Thread-1 Thread-1 Thread-1 Thread-1 Thread-1 main Thread-0 Thread-1 main main main main main main main
Коментарі
Дописати коментар