我的类有两个同步函数。这意味着如果 thread-0
执行 proc1()
并且 thread-1
希望对 proc1()
它将等待thread-0
以proc1()
结束。如果我错了,请纠正我。
但是如果thread-0
执行proc1()
并且thread-1
想要执行proc2()
怎么办>?当 proc1()
将由 thread-0
完成时,thread-1
是否需要等待?
换句话说 - 同步函数是在类对象级别同步还是仅在函数级别同步?
public class MyClass
{
public synchronized void proc1()
{
...
}
public synchronized void proc2()
{
...
}
}
最佳答案
关于 synchronized
您需要了解的最重要的事情同步方法或同步块(synchronized block)总是在某个对象上同步,并且不允许两个线程同时在同一个对象上同步。
对于同步块(synchronized block),同步对象是显式提供的。在此示例中,它是变量 foo
引用的任何对象。 :
synchronized(foo) {
...
}
对于同步实例方法,同步对象为 this
(即调用该方法的对象。)在本例中,是 MyClass
的实例。 :
class MyClass
synchronized void proc1() {
...
}
}
而且,如果它是同步的 static
方法中,同步对象是类对象。在这种情况下,它将是 MyClass.class
:
class MyClass {
static synchronized void proc2() {
...
}
}
关于java - 两个函数中的同步指令是否意味着它们都只能用于一个线程?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35507185/