2014-01-08 55 views
2

我使用Eclipse KEPLER [我爱Eclipse JUNO版本] 警告:我的英文不好,请纠正我或发现无意义的句子。可以一个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

如果他们落后于你的主循环,这就是多线程是很好用的,这样,每个方法可以在一个单独的线程运行,一旦完成就向主线程反馈,而不会减慢主线程上的事物。

相关问题