2016-03-27 3 views
1

Предположим, у меня есть следующий фрагмент кода:Стартовые две нити с бесконечными петлями одновременно

Thread x = new Thread() { 

     public void run() { 

      while (true) { 
       // do something 
      } 
     } 

    }; 

    Thread y = new Thread() { 

     public void run() { 

      while (true) { 
       // do something 
      } 
     } 

    }; 

x.start(); 
y.start(); 

Теперь мой вопрос, так как эти два потока и запустить бесконечные циклы, они будут как начать работать одновременно?

+0

Думаю, вам стоит пересмотреть определение 'Thread'. – user2004685

+0

Никогда не предполагайте ничего о времени потоков. – Natecat

+0

Вы никогда не начинаете новый поток, так как вы вызываете метод 'run()' в потоках вместо 'start()'. В настоящее время вы начнете бесконечный цикл в 'x.run()' в основном потоке. –

ответ

0

Тот же код может генерировать разные выходные данные при его выполнении в одинаковых или разных системах в разное время. Точное время выполнения потока определяется тем, как планировщик основного потока планирует выполнение потоков. Поскольку планирование потоков специфично для конкретной JVM и зависит от множества параметров, одна и та же система может изменить порядок обработки ваших потоков.

+0

Итак, что я могу сделать, чтобы они оба были в одно и то же время? – ninesalt

+0

Попробуйте это ... http://stackoverflow.com/q/3376586/2822371 – abhaybhatia

0

Если ваш компьютер имеет одно ядро: Только один поток будет запускаться за один раз. Следовательно, один начнется раньше другого

Если ваш компьютер имеет несколько ядер: Два потока могут выполняться одновременно (по одному потоку на каждом ядре). Следовательно, они могут запускаться одновременно, но нет гарантии

В любом случае это не зависит от того, работает ли поток бесконечным циклом или нет.

3

Ну, это зависит от планировщика потоков JVM, типа машины, в которой вы используете свой код (одноядерный или многоядерный) и ОС. Когда вы используете метод start() при первом вызове в новом потоке, он просто переходит из нового состояния в Runnable ,

Планировщик потоков, который является частью JVM, решает, какой поток должен работать в любой момент, а также выводит потоки из состояния выполнения. Любой поток в состоянии runnable может быть выбран планировщиком.