java 多线程设计

fengyoujie 2014-01-23 03:02:04
诸位老师,我最近在看 java 多线程设计模式,做后面的习题的时候,有个问题搞不懂。
先发代码。问题在代码后面给出。
ClientThread.java代码

public class ClientThread extends Thread {

public class Main {

/**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
new ClientThread("AAAAA").start();
new ClientThread("BBBBB").start();
new ClientThread("CCCCC").start();
}

}


@Override
public void run(){
System.out.println(getName() + " BEGIN ");

for(int i=0;i<10;i++) {
Log.println("i= " + i);
}

Log.close();

System.out.println(getName() + " END ");
}
}

TSLog.java代码

import java.io.PrintWriter;

public class TSLog {

private static PrintWriter mPrintWriter = null;

public TSLog(String fileName){
try {
mPrintWriter = new PrintWriter(fileName);
} catch (FileNotFoundException e) {

e.printStackTrace();
}
}

public static void println(String msg){
mPrintWriter.write(msg+"\r\n");

}

public static void close(){
System.out.println("END of log");
mPrintWriter.close();
}
}


Log.java代码

import java.io.PrintWriter;

public class Log {

private PrintWriter mPrintWriter = null;
private static final ThreadLocal mThreadLocal = new ThreadLocal();

public Log(String fileName){

}

public static void println(String msg){
getLog().println(msg);
}

public static void close(){
getLog().close();
}

private static TSLog getLog(){
TSLog log = (TSLog)mThreadLocal.get();
if(log == null){
log = new TSLog(Thread.currentThread().getName() + "_log.txt");
mThreadLocal.set(log);
}
return log;
}
}



Main.java代码

public class Main {

/**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
new ClientThread("AAAAA").start();
new ClientThread("BBBBB").start();
new ClientThread("CCCCC").start();
}

}


这是一个多线程记录日志的demo,每一个线程创建一个日志文件。
我的问题: 在ClientThread构造函数中写入Log.println("constructor is called") ;
但是在日志文件中并没有constructor is called 字符串。
请问诸位这是什么原因呢?
...全文
228 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
wanding_ 2014-01-26
  • 打赏
  • 举报
回复
我试了下,构造方法写文件没有flush嘛
fw347969680 2014-01-24
  • 打赏
  • 举报
回复
引用 4 楼 fengyoujie 的回复:
[quote=引用 2 楼 jintianhen1 的回复:] 记录日志用log4j啊,如果后加入的用aop,多线程问题容易发生并发死锁问题
谢谢 您的提示。问题解决[/quote] 问题已经解决了?怎么解决的?
fengyoujie 2014-01-23
  • 打赏
  • 举报
回复
引用 2 楼 jintianhen1 的回复:
记录日志用log4j啊,如果后加入的用aop,多线程问题容易发生并发死锁问题
谢谢 您的提示。问题解决
fengyoujie 2014-01-23
  • 打赏
  • 举报
回复
引用 1 楼 raistlic 的回复:
你看的是哪个线程的log文件,应该会有一个主线程的log文件,三个 constructor is called 都在里面


谢谢您的回答,的确有一个主线程的日志文件。但是这里面是空空的。
静山晚风 2014-01-23
  • 打赏
  • 举报
回复
记录日志用log4j啊,如果后加入的用aop,多线程问题容易发生并发死锁问题
raistlic 2014-01-23
  • 打赏
  • 举报
回复
你看的是哪个线程的log文件,应该会有一个主线程的log文件,三个 constructor is called 都在里面

62,614

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧