Java同步性能

Qui*_*ion 0 java multithreading synchronization locking readwritelock

我想就此解决一个小纠纷.任何帮助将不胜感激.

我编写了自己的文件处理程序,它附加到记录器.这是一个文件处理程序,并由多个线程访问,我使用同步,以确保在写入过程中没有冲突.此外,它是一个滚动日志,所以我也关闭并打开文件,也不希望有任何问题.

他对此的回应是(从电子邮件中粘贴)

我坚信Handler中的同步非常糟糕.这么简单的任务太复杂了.所以,我想说为什么不为每个线程使用一个实例?

从性能和内存管理的角度来看,你会说什么更好.非常感谢您的回复.每当在多线程应用程序中涉及写入和读取时,我一直在Java应用程序上使用同步,并且没有听说过任何严重的性能问题.

所以,我想知道是否有任何问题,我真的应该切换到每个线程一个实例.

一般来说,使用同步的垮台是什么?

编辑:我之所以编写自定义文件处理程序(是的,我喜欢slf4j),是因为我的自定义处理程序一次处理两个文件,另外我还有很少的其他函数在写入文件时执行.

rat*_*eak 5

另一个解决方案是使用一个单独的线程来执行(自己代价高昂)编写并使用并发队列来传递来自域线程的日志消息

这里的关键部分是,在写入文件时推送到队列的成本要低得多,这意味着并发日志调用的干扰更少

然后对日志的调用就像记录一样

private static BlockingQueue logQueue = //...

public static void log(String message){
//construct&filter message
    logQueue.add(message);
}
Run Code Online (Sandbox Code Playgroud)

然后在记录器线程中它看起来像

while(true){
    String message = logQueue.poll();
    logFile.println(message);//or whatever you are doing
}
Run Code Online (Sandbox Code Playgroud)