日期:2014-05-20  浏览次数:20724 次

java 多线程设计
诸位老师,我最近在看 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 字符串。