【发布时间】:2012-08-15 19:49:33
【问题描述】:
据我所知和研究,Java 中的 synchronized 关键字可以同步方法或代码块语句以处理多线程访问。如果我想在多线程环境中锁定文件以用于写入目的,我必须应该使用Java NIO package 中的类以获得最佳结果。昨天,我想出了一个关于处理文件 I/O 操作的共享 servlet 的问题,BalusC cmets 很好地帮助解决了这个问题,但是this answer 中的代码让我感到困惑。我不是要求社区“烧掉那个帖子”或“让我们对他投反对票”(注意:我没有投反对票或其他任何东西,我对答案没有任何反对意见),我要求解释代码片段是否可以被认为是一种好习惯
private static File theFile = new File("theonetoopen.txt");
private void someImportantIOMethod(Object stuff){
/*
This is the line that confuses me. You can use any object as a lock, but
is good to use a File object for this purpose?
*/
synchronized(theFile) {
//Your file output writing code here.
}
}
【问题讨论】:
-
+1 因为现在你已经超过 4000 了。
-
@Hassan 无论是谁,无论声誉如何,在您觉得问题/答案有帮助之前不要这样做。
-
@Nandkumar 我确实喜欢这个问题,我只是觉得它很有趣。
-
@LuiggiMendoza:您在链接到
Don't use static objects in a Java Web Application...的 OP 中的评论是什么意思。我不确定你的意思 -
@user384706 Java Web 应用程序中的静态对象可能会导致内存泄漏,因为它们是在您每次部署应用程序时创建的(加载类的位置),但在您取消部署应用程序时它们不会被释放,静态对象保留在 JVM 中,直到您停止它,这意味着关闭 Web 应用程序服务器(Tomcat、JBoss 或您使用的任何东西)。
标签: java synchronized