Я использую 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
}
}
Да, если вы используете многопоточное приложение. http://docs.oracle.com/javase/tutorial/essential/concurrency/ –
Похоже, вам нужно узнать, как работают Runnable и Thread. – Julien