потоки в java в одном файле
Помогите составить простую программу. на ее примере хочу разобраться с потоками.
есть 2 кода:
//первый
for(int a = 0; a < 5; a++){
System.out.println("1");
}
// второй
for(int b = 0; b < 5; b++){
System.out.println("0");
}
мне нужно объединить эти 2 программы, чтобы они работали одновременно и важно ! в одном файле !. вывод должен быть примерно таким:
0
1
0
1
...
Ответы (1 шт):
Автор решения: insolor
→ Ссылка
Простейшая реализация: куски кода, которые должны выполняться в отдельных потоках, кладем в отдельные методы, эти методы передаем в конструктор класса Thread. В циклы нужно добавить небольшую паузу, иначе не успеет произойти переключение на второй поток.
class Solution {
private static void fun1() {
//первый
for(int a = 0; a < 5; a++){
System.out.println("1");
try {
// Делаем паузу в 100 миллисекунд, чтобы успело произойти переключение на другой поток
Thread.sleep(100);
} catch (InterruptedException e) {
// Thread.sleep может выбросить исключение, если поток пытаются прервать,
// нужно это исключение обработать - просто выходим из цикла
break;
}
}
}
private static void fun2() {
// второй
for(int b = 0; b < 5; b++){
System.out.println("0");
try {
Thread.sleep(100);
} catch (InterruptedException e) {
break;
}
}
}
public static void main(String[] args) {
// Создаем потоки, в объект Thread передаем метод, который должен выполняться в этом потоке
Thread thread1 = new Thread(Solution::fun1);
Thread thread2 = new Thread(Solution::fun2);
// Запускаем потоки
thread1.start();
thread2.start();
// Выполнение программы завершится как только завершатся все не daemon потоки,
// поэтому дополнительно никакого ожидания завершения потоков тут делать не нужно
}
}