【发布时间】:2018-05-25 10:40:36
【问题描述】:
我有一个带有多线程项目常用方法的对象。一些方法是同步的。我的问题是当一个线程访问同步方法而另一个线程访问另一个同步方法时。这将使一个线程等待另一个线程。我只想在访问相同的同步方法时锁定线程,但我不知道如何。我最近发现了关键字同步。
这是我的一种方法。
public synchronized static void writeError(Exception err){
String time = longDate();//here will get personalized current date
//longDate is not synchronized.
try {
FileWriter path = new FileWriter("ERROR - " + time + ".txt",true);
err.printStackTrace(new PrintWriter(path));
path.flush();
} catch (IOException e) {}
}
对这种方法有什么想法吗?
【问题讨论】:
-
那么是时候让您了解一下多线程和锁定的一般知识了。您找到了
synchronized,但您知道您可以在其他地方使用它,而不仅仅是在方法定义中吗? -
我知道我可以在 synchronized(Obj){...} 等方法块中使用它
-
..
Obj有什么意义? -
您的方法是静态的,所以发生的事情是因为同步类 obj 被锁定而不是实例对象。所以你不能调用属于该类的其他方法。
-
为每个需要为
synchronized的块组合创建一个单独的锁定对象,正如@Kayaman 所暗示的那样
标签: java multithreading synchronized