java - 两个函数中的同步指令是否意味着它们都只能用于一个线程?

标签 java multithreading

我的类有两个同步函数。这意味着如果 thread-0 执行 proc1() 并且 thread-1 希望对 proc1() 它将等待thread-0proc1()结束。如果我错了,请纠正我。

但是如果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/

相关文章:

c# - Windows服务中的多线程

java - 在 Java 中创建泛型数组

java - 多线程合并排序,添加额外的线程

multithreading - 澄清 request_threaded_irq 的行为

java - GMF - 以编程方式扩展/折叠隔间

c++ - 确保使用双重比较和交换指令,用于无锁堆栈?

java - 为什么没有 volatile ?

java - 为什么@UniqueConstraint在 hibernate 中不起作用?

java - 在Java中使用ASPOSE自动将html转换为pdf

java - 关于Android编译器