我在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上使用相同的应用程序时,我只能看到同步行为。
答案 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);
}
}
}