zoukankan      html  css  js  c++  java
  • 一个日志服务器的框架

    package thread;

    import java.io.FileNotFoundException;
    import java.io.PrintWriter;
    import java.util.concurrent.BlockingQueue;
    import java.util.concurrent.LinkedBlockingDeque;
    /**
    * 一个日志服务的框架
    * @author Administrator
    *
    */

    public class LoggerWriter {
    private final BlockingQueue<String>queue;
    private final LoggerThread loggerThread;

    private final PrintWriter writer;
    private boolean isShutdown;
    private int reservations;
    public LoggerWriter() throws FileNotFoundException{
       queue=new LinkedBlockingDeque<String>();
       loggerThread=new LoggerThread();
       writer=new PrintWriter("");
    }

    public void start(){
       loggerThread.start();
    }
    public void stop(){
       synchronized (this) {
        isShutdown=true;
       }
       loggerThread.interrupt();
    }
    public void log(String msg) throws InterruptedException{
       synchronized (this) {
        if(isShutdown)
         throw new IllegalStateException();
        ++reservations;
       }
       queue.put(msg);
    }

    private class LoggerThread extends Thread{
       public void run(){
       
        try {
         while (true) {
          try {
           synchronized (LoggerWriter.this) {
            if(isShutdown&&reservations==0)
             break;
           }
           String msg=queue.take();
           synchronized (LoggerWriter.this) {
            --reservations;
           }
           writer.print(msg);
          } catch (InterruptedException e) {
          
          }
         }
        } finally{
         writer.close();
        }
       
       }
      
    }
    }

  • 相关阅读:
    Beta版本冲刺第二天 12.6
    Beta版本冲刺第一天 12.5
    Linux学习(2)—— 图形化界面
    Linux学习(1)—— 虚拟机安装Linux系统
    IntelliJ IDEA使用
    spring+springmvc+hibernate 整合
    新的篇章
    软件工程实践总结作业——个人作业
    Beta版本冲刺———第七天
    Beta版本冲刺———第六天
  • 原文地址:https://www.cnblogs.com/macula7/p/1960463.html
Copyright © 2011-2022 走看看