我创建了一个枚举单例,如下所示:
public enum Logging {
    INSTANCE;   
        ExecutorService pool = Executors.newFixedThreadPool(4);
}
现在我正在使用这个池在特定情况下进行异步日志记录。调用代码如下:
Logging.INSTANCE.execute(new MyRunnable("LogType.A",logData));
MyRunnable 对象的 Run 方法很简单,如下所示:
    public class MyRunnable {
        public MyRunnable(LogType logType,String logData){
           this.logType=logType;
           this.logData=logData;
        }  
        public void run() {
                switch(logType) {
                case A:         
                    logData(Logger.getLogger(A_LOG),logData);
                    break;
                case B:         
                    logData(Logger.getLogger(B_LOG,logData));
                    break;
        }
        private void logData (Logger logger,String logdata) {
        if(some condition)
         logger.info(logdata);
        else
         do something else;
        }
    }
现在我的查询是,如果我向具有多个线程的队列提交大量请求,我会面临任何并发问题吗? executor.execute(task) 是否已经同步或者我是否需要在同步方法中包装执行方法(在 Logging枚举),然后调用该方法,如下所示:
public synchronized  void submitTask(Runnable task) {       
    executor.execute(task);     
}