Рассмотрим следующий наш поток:Основной нитью проходит последовательность
public class HeavyWorkRunnable implements Runnable {
@Override
public void run() {
System.out.println("Doing heavy processing - START "+Thread.currentThread().getName());
try {
doDBProcessing();
} catch (InterruptedException e) {
e.printStackTrace();
}
System.out.println("Doing heavy processing - END "+Thread.currentThread().getName());
}
private void doDBProcessing() throws InterruptedException {
// TODO
}
}
И главный метод:
public class ThreadRunExample {
public static void main(String[] args){
Thread t1 = new Thread(new HeavyWorkRunnable(), "t1");
Thread t2 = new Thread(new HeavyWorkRunnable(), "t2");
System.out.println("Starting Runnable threads");
t1.start();
t2.start();
System.out.println("Doing main heavy processing - START "+Thread.currentThread().getName());
System.out.println("Runnable Threads has been started");
}
}
Теперь выходы различны в разное время пробега. Например:
Output1:
Начиная Runnable темы
Doing основной тяжелой обработки - START основной
Выполнение интенсивной обработки - START t1
Выполнение интенсивной обработки - START t2
Выполнение тяжелой обработки - END t2
запускаемых потоков было начато
Выполнение тяжелой обработки - END t1
Выход2:
Начиная запускаемых потоков
Ведение основной тяжелой обработки - START основные
Runnable Темы Начата
Выполнение интенсивной обработки - START t1
Выполнение интенсивной обработки - END t1
Doing тяжелую обработку - START t2
Выполнение интенсивной обработки - END t2
согласно моему пониманию резьбы:
1. только один поток может работать одновременно.
2. Система выбирает потоки случайным образом для запуска, если приоритеты не заданы.
Итак, система должна выполнить задачи «основной» нити, а затем запустить либо t1, либо t2. Если это так, то выход всегда должен содержать:
Начиная Runnable темы
Doing основной тяжелой обработки - START основные
Runnable Темы Начата
как первые три строки. Я не понимаю, что пропустил в своем понимании.
Почему бы вам не начать темы после того, как ваш основной поток напечатал свои сообщения? – Kayaman
Что я могу сделать, чтобы получить этот вывод. Но моя забота заключается в том, что если в «основном» методе нет «sleep()», он должен работать в первую очередь. –
Не совсем. Вы допустили ошибку, предполагая, что «Только один поток может запускаться за раз». – Kayaman