2013-12-02 5 views
1

При кодировании - вы могли бы использовать Java в качестве примера/примера, как я его больше всего знаю - как вам удается одновременно совершать несколько «действий» одновременно? Я понимаю, что с достаточным количеством циклов/булей, вы можете постоянно устанавливать простой код - с различными выходами, основанными на разных входах, но это не совсем то, что я имею в виду. Насколько я понял, код был довольно последовательным (что хорошо, но я имею в виду чисто, конкретно последовательный). Например, для какого-то калькулятора конверсии: попросите ввести, получите вход/сделку с неправильным вводом, конвертируйте, отобразите, попросите другое преобразование/завершение.Как одновременно иметь несколько циклов/процессов/и т. Д.?

Однако для более сложных кодов я хотел бы знать, как допускать различные действия/события в одно и то же время или возможность такого. Например, мобильные приложения. позволяют изменять настройки (почти) в любое время, не дожидаясь определенного времени в прогоне программы, чтобы попросить изменить настройки. Аналогичным образом, видеоигры позволяют вводить данные в любой момент времени, в то время как другие действия все еще происходят (например, перемещение во время прыжка и возможность взаимодействия AI/врагов). Да, код по-прежнему должен следовать последовательностям, но как я могу одновременно выполнять различные входы/выходы или действия при запуске других процессов/процедур в одной и той же программе?

Короче говоря, лучший способ, который я могу описать, чтобы описать то, что я прошу, - это: Как мне «несколько программ/кода» работать в одном проекте одновременно?

+0

Его называют многопоточным .. Вы можете запускать несколько потоков (легкие процессы) одновременно ... – TheLostMind

+4

Прочитайте учебник по Java [Урок параллелизма] (http://docs.oracle.com/javase/tutorial/essential/concurrency/) , Просто имейте в виду, что нарезание резьбы может сделать вашу голову, когда вы сначала попытаетесь обернуть свой разум вокруг вовлеченных концепций. Очень опытные программисты могут и постоянно сталкиваются с совпадением, но не обескураживают - вам нужно что-то начинать. – MarsAtomic

+0

Направление в правильном направлении. Мистер Новичок. Держите это отношение, и вы узнаете нагрузки :) Да, и для чего вы хотите многопоточность. Увлекательная концепция. –

ответ

0

Что вы описываете - это параллелизм или многопоточность (ознакомьтесь с документами Java http://docs.oracle.com/javase/tutorial/essential/concurrency/ или другим учебником http://www.vogella.com/tutorials/JavaConcurrency/article.html). Это позволяет одновременно выполнять несколько действий, используя либо несколько ядер, либо быстро переключаться между действиями, чтобы создать иллюзию одновременности. Всего несколько оснований ... Для этого вы создаете несколько объектов Thread и предоставляете каждому объекту потока объект Runnable, который в основном используется для указания протектора, что вы хотите. Каждый поток может выполняться только один раз. Темы также могут быть помещены в «sleep», что означает, что их выполнение будет приостановлено на заданный промежуток времени (пример того, когда вы хотите сделать это, может быть, если вы делаете таймер, и вам нужно что-то изменить время на экран как каждый второй.) Вы также должны знать, что потоки могут генерировать исключения, поэтому обычно приходится ловить исключения.

Я написал эту программу в качестве примера потоков. Он будет распечатывать, какой поток запускается, а затем помещает поток в режим сна перед пробуждением и повторением 25 раз для каждого потока.

Runnable myRunnable = new Runnable() { 

     public void run() { 

      try { 
       for (int i = 0; i < 26; i++) { 
        System.out.println(Thread.currentThread().getName() 
          + " is running."); 
        Thread.sleep(500); 
       } 
      } catch (InterruptedException e) { 
       e.printStackTrace(); 
      } 

     } 
    }; 

    Thread a = new Thread(myRunnable, "Thread one"); 
    a.start(); 
    Thread b = new Thread(myRunnable, "Thread two"); 
    b.start(); 
} 

Который дает выходной сигнал

Thread one is running. 
Thread one is running. 
Thread two is running. 
Thread two is running. 
Thread one is running. 
Thread two is running. 
Thread one is running. 
Thread one is running. 
Thread two is running. 

Обратите внимание, как на выходе отличается каждый раз, и не прогрессирует линейно от резьбы одного до двух, как вы обычно привыкли.

Смежные вопросы