Поведение Java-потоков в Windows - PullRequest
0 голосов
/ 03 февраля 2012

У меня есть некоторые проблемы с использованием потоков в 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 голосов
/ 03 февраля 2012

И поведение, которое вы видите, совершенно нормально. Добавьте следующее в ваш 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);
  }
 }
}

И несколько интересных для вас лекций!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...