2014-01-08 3 views
2

Я использую Eclipse KEPLER [Я любил Eclipse JUNO version] Предупреждение: Мой английский не очень хорош, пожалуйста, исправьте меня или заметьте, если найдены бессмысленные предложения.Может ли один исполняемый файл java запускать более одного цикла в одно и то же время

Моя проблема: У меня есть программа, в которой есть много петель внутри основного цикла, и я заметил критический сбой, который заставит всю программу застрять на каждые 3 секунды, а затем снова проснется. [Я хотел бы отправить код, но он включает в себя более 14 классов, поэтому ... возможно, я его не посылаю]

Проблема вызвана петлями (циклами), которые занимают слишком много времени, чтобы закончить. Если эти «петли» находятся в «основной петле», этот «основной цикл» занимает 3 секунды, чтобы начать снова [что неприемлемо]

Поскольку монтирование кода я написал пример моей проблемы и, возможно, это возможное решение , но я не знаю, как это сделать:

public class EX1 { 
    static public String w="";  // something where program can storage stuff 
    static public String alp="AaÁáÂâÄäÃãÅåÀàBbCcDdEeÉéÊêËëÈèFfGgHhIiÍíÎîÏïÌìJjKkLlMmNnÑñOoÓóÔôÖöÕõÒòPpQqRrSsTtUuÚúÛûÜüÙùVvWwXxYyÝýÿZz1234567890 "; 

    public static void StuffThatSupposeToBeAlwaysOn(){  // As I told here is loop that suppose to be running all time 
     int rand=0;        // in this example, this loop works as random text generator 
     for(int a=0;a<100;a++){ 
      rand=(int)(Math.random()*alp.length()-1); 
      w=w+(alp.substring(rand,rand+1)); 
     } 
    } 
    public static void StuffThatSupposeToBeAlwaysOn2(){ //this suppose to be another same time running loop 
     /* 
     * printed String w should always be 16 letters long 
     * but because program run both loops one by one, it simply can't print it right length (16) 
     * so it print it as max length of loop (100) 
     */ 
     for(int a=0;a<50;a++){ 
      if(w.length()>15){ 
       System.out.println("Randomly generated text: "+w+". length of text is: "+w.length()); 
       w=""; 
      } 
     } 
    } 

    public static void main(String[] args) {// main program 

     long a=System.currentTimeMillis(); 
     while(a+2000>System.currentTimeMillis()){ //Main loop[automated kill after 2 seconds] 

      StuffThatSupposeToBeAlwaysOn();   // so if I get both running at same time, problem is solved. 
      StuffThatSupposeToBeAlwaysOn2(); 

     }System.exit(0);//program gets killed here 
    } 
} 
+2

Да, если вы используете многопоточное приложение. http://docs.oracle.com/javase/tutorial/essential/concurrency/ –

+1

Похоже, вам нужно узнать, как работают Runnable и Thread. – Julien

ответ

1

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

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