2012-02-02 2 views
0

У меня есть некоторые проблемы с использованием потоков в Windows Server 2003.Java резьб поведение на Windows,

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, я вижу только синхронное поведение.

+2

Как вы определении "синхронные" и "асинхронный"? – skaffman

+0

Это может быть разница в разрезе времени. Вы пробовали, например, с 10000 или 100 000 итераций в коде потока вместо 1000? – Tudor

+0

@ skaffman: Вероятно, он означает, что выход журнала чередуется в 'асинхронном'. – Tudor

ответ

0

И поведение, которое вы видите, совершенно нормально. Добавьте следующую строку в ваш Logback ... Писатель класс:

static Object syncPoint = new Object(); 

И бег() метод:

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!

+0

И как это объясняет разницу между поведением в двух разных версиях Windows? – Tudor

+0

Порядок и когда нить дает его выполнение, не должны иметь значения при разработке вашего приложения. Например, окна используют временные срезы (но реализации различаются между разными версиями окон), а linux использует циклическое планирование для планировщика потоков (это планировщик ядра операционной системы). http://ru.wikipedia.org/wiki/Scheduling_%28computing%29 –

Смежные вопросы