Как интерпретировать и объяснить результат выполнения этой программы Java Threading - PullRequest
2 голосов
/ 04 мая 2019

Я новичок в темах.Я прочитал статью из https://www.math.uni -hamburg.de / doc / java / tutorial / essential / threads / definition.html

"Поток - это один последовательный поток управления впрограмма «.Это все еще неосязаемо для меня, было бы очень полезно, если бы кто-то мог привести другой пример и объяснить больше.

Затем я провожу некоторые примеры со следующим кодом.

class SimpleThread extends Thread {
     public SimpleThread(String str) {
         super(str);
     }
     public void run() {
         for (int i = 0; i < 10; i++) {
             System.out.println(i + " " + getName());
             try {

                 # sleep((int)(Math.random() * 1000));
                 /* I have changed Math.random() to 0.5 so that all will sleep with same amount of time */
                 sleep((int)(0.5 * 1000));
             } catch (InterruptedException e) {}
         }
         System.out.println("DONE! " + getName());
     }
 }

 class ThreeThreadsTest {
     public static void main (String[] args) {
         new SimpleThread("Jamaica").start();
         new SimpleThread("Fiji").start();
         new SimpleThread("Bora Bora").start();
     }
 }

ВОсновная функция ThreeThreadsTest, три потока создаются один за другим, результат должен выглядеть следующим образом:

0 Ямайка
0 Фиджи
0 Бора-Бора
1 Ямайка
1 Фиджи
1 Бора-Бора
2 Ямайка
2 Фиджи
2 Бора-Бора ...

но вместо этого результат такой:
0 Ямайка
0Бора Бора
0 Фиджи
1 Ямайка
1 Бора Бора
1 Фиджи
2 Ямайка
2 Фиджи
2 Бора Бора
3 Ямайка
3 Фиджи
3 Бора-Бора
4 Бора-Бора
4 Ямайка
4 Фиджи
5 Бора-Бора
5 Ямайка
5 Фиджи
6 Бора-Бора
6 Ямайка
6 Фиджи
7 Бора-Бора
7 Фиджи
7 Ямайка
8 Бора-Бора
8 Ямайка
8 Фиджи
9 Бора-Бора
9 Фиджи
9Ямайка
СДЕЛАННЫЙ!Фиджи
СДЕЛАНО!Бора Бора
СДЕЛАНО!Ямайка

Может кто-нибудь объяснить, почему это произойдет?

Ответы [ 2 ]

3 голосов
/ 04 мая 2019

Thread.start() помещает поток в очередь потоков, которые готовы к выполнению.Затем ОС выбирает любой из готовых потоков и выполняет его.Нет никакой гарантии, какая нить будет выбрана следующей, поэтому порядок выполнения довольно случайный.

1 голос
/ 04 мая 2019

Внутри потоков есть «последовательный поток», но это не так для нескольких потоков.

«то же количество времени» не так фиксировано, как кажется.Внутри процессора время в миллисекундах похоже на эоны.Процессор будет ждать заданные вами миллисекунды, но после «ожидания» дело до процессора, какой поток возобновит работу первым.

...