我对Java很陌生,正在努力学习同步的概念。我从Java教程Oracle中看到了这个引用。我很难理解他们所说的“类对象”指的是什么。类对象到底是什么?
您可能想知道当调用静态同步方法时会发生什么,因为静态方法与类关联,而不是与对象关联。在这种情况下,线程获取与类关联的class对象的内部锁。因此,对类的静态字段的访问由与该类的任何实例的锁不同的锁控制。
发布于 2016-02-16 23:29:07
Class本身就是一个类。您可以通过以下方法获得类实例:
String.class (如果您静态地了解该类),这是Class<String>的一个实例someInstance.getClass() (如果需要实例的具体类),这是Class<? extends SomeInstance>的一个实例,假设someInstance是SomeInstance类型的引用(绑定是因为它可能是SomeInstance的子类)。发布于 2016-02-16 23:22:34
Class是Java中的一个实际类。存在Class类型的对象。对于每个关键字-class将关联一个类型为Class的对象(至少我假设--这是有意义的,并使该块具有意义)。
我认为这种行为是有意义的--当您同步一个静态方法时,您肯定不能对任何对象进行同步。
可以说,synchronized static是一个反模式。这是一个程序范围内的瓶颈,也是对可扩展性的厌恶。假设您的程序在1GB服务器上运行良好。如果您想要使其适应具有256倍端口和网络容量以及8倍内核的8GB服务器,就无法扩展同步的静态代码。当然,您不能创建另一个对象。我认为唯一的解决方案是使用它来拆分另一个进程和另一个JVM。
https://stackoverflow.com/questions/35444959
复制相似问题