Windows上的Java线程行为

时间:2012-02-02 22:23:05

标签: java windows multithreading

我在Windows Server 2003中使用线程时遇到一些问题。

main

for (int i = 0; i <= 100; i++) {
   LogBackWriterRunnable logBackWriterRunnable = new LogBackWriterRunnable(i, logger);
   Thread t = new Thread(logBackWriterRunnable);
   t.start();
}

LogBackWriterRunnable

public void run() {
    try{
        for(int i = 0; i <=1000;i++){
           logger.info("Info Message from process number -------> " + noProceso + cadenaIdentificadora);
           logger.warn("Error Message from process number -------> " + noProceso + cadenaIdentificadora);
           logger.info("Debug Message from process number -------> " + noProceso + cadenaIdentificadora);
        }
    }catch(Exception e){
        System.out.print("Excepción ---> "+ e);
    }
}

当我在Windows XP上使用应用程序时(使用t.start();t.run();)我可以看到不同的行为(同步和异步),一切都很完美。

但是,当我在Windows Server 2003 ED上使用相同的应用程序时,我只能看到同步行为。

1 个答案:

答案 0 :(得分:0)

你看到的行为是完全正常的。将以下内容添加到LogBack ... Writer类:

static Object syncPoint = new Object();

run()方法:

public void run() {
  synchronized(syncPoint){
   try{
    for(int i = 0; i <=1000;i++){
       logger.info("Info Message from process number -------> " + noProceso + cadenaIdentificadora);
       logger.warn("Error Message from process number -------> " + noProceso + cadenaIdentificadora);
       logger.info("Debug Message from process number -------> " + noProceso + cadenaIdentificadora);
    }
   }catch(Exception e){
    System.out.print("Excepción ---> "+ e);
  }
 }
}

And some interesting lecture for you!