我使用Eclipse KEPLER [我喜欢Eclipse JUNO版本] 警告:我的英语一点都不好,如果发现无意义的句子,请纠正我或注意我。
我的问题是: 我有一个程序,在主循环内部有很多循环,我注意到一个严重的故障,这将导致整个程序每隔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
}
}
答案 0 :(得分:1)
如果它们落后于你的主循环,这就是多线程很好用的地方,这样每个方法都可以在一个单独的线程上运行并在完成后反馈给主线程,而不是减慢主线程上的东西