class MyClass
{
public synchronized void print() {}
public static synchronized void buffer() {}
}
这两个问题的答案都是“是”:静态级锁不会阻止实例级synchronized
方法,它们适用于所有静态synchronized
方法。
但是,通常不鼓励在类上进行同步,因为这会使您的类面临无限等待攻击。肇事者在类上进行同步,阻止所有静态synchronized
方法运行。更好的方法是创建一个用于锁定的私有对象,并对其进行同步
,如下所示:
class MyClass
{
public synchronized void print() {}
private static Object staticLock = new Object();
public static void buffer() {
synchronized(staticLock) {
...
}
}
}
同步实例方法也是如此:如果类要在潜在的非合作环境中使用,最好使用私有对象进行锁定。
我在许多关于可重入锁的教程中看到,它们创建一个新的可重入锁并注入资源,可重入锁的锁定和解锁在try/finally块中调用。我不理解这个锁和线程中使用的资源之间的连接。下面是一个关于可重入锁的教程示例 资源代码 线程声明代码中使用的资源 有人能解释一下,这是如何防止多个线程同时访问给定的资源,从而导致争用情况的???这个可重入锁是在资源中创建对象级锁还是类级锁???
问题内容: 我一直在研究Java多线程概念。我越经历他们,我就越困惑。 现在,我还不了解Java中的类级别,对象级别,显式和固有锁定之间的区别。有人可以让我知道这是什么吗?另外,如果我可以理解一些示例,那对我也将非常有帮助。 问题答案: 显式与内在 当您在对象上使用或间接用作方法签名的一部分时,您正在创建内部锁。您依赖与所有对象和类关联的内置锁。 软件包中的Java 5+提供了显式锁。最常用的类可
我一直在研究Java多线程概念。我看得越多,就越困惑。 现在我不明白Java中类级别、对象级别、显式锁定和内在锁定之间的区别。有人能告诉我是什么吗?此外,如果我能得到一些例子来理解,那将对我很有帮助。
假设我有两条线。Thread1正在访问一个同步方法,同时,Thread2正在访问同一对象的另一个同步方法。据我所知,Thread2应该等到Thread1完成它的任务。我的问题是,Thread2是否在对象的等待线程列表中?对我来说似乎是这样,但Thread2不调用wait()方法,那么作为逻辑结果,它不应该在对象的等待线程列表中。如果它不在对象的等待线程列表中,那么Thread2的状态是什么?
我有两个从抽象类继承的类,它们有父子关系。 所以我使用了注释OneToOne和ManyToOne,但是子类中的父实体总是为空。有人能帮我吗,我花了几个小时谷歌和测试了许多conf,但没有成功。 这些是我的类中的代码: ... ... ... 如果我不添加@JoinCol列注释,JPA会创建一个关联表,但无法检索父级,而关联可以直接通过在数据库中请求来完成。 非常感谢你的帮助。 祝好
公共类DoSomething{private static final Logger Logger=LoggerFactory.getLogger(DoSomething.class); 我试图创建一个LogMessage的对象。并在DoSomething类的方法中使用它。这是好的还是我应该移动方法中的行?