Java文档说“同一对象上的同步方法的两次调用不可能交错”。我需要知道的是,synchronized是否还会阻止 同一类的 两个不同 实例中的
同步方法交织。
例如,类Worker具有称为process()的方法。我们有几个在自己的线程中运行的Worker实例。我们希望防止多个实例同时运行process()方法。会
同步 吗?
谢谢。
没有; synchronized
仅防止多个线程在 同一 实例中同时执行该方法。如果您有 n个 实例,则可能有 n个
线程,每个线程在一个实例中执行该方法。
如果您需要确保只有一个线程可以在所有实例中执行该方法,则应使方法成为static
或使方法成为非方法synchronized
,而应使用synchronized
方法内部的块来锁定private static
字段。
编辑:请注意,在一个同步private
实例变量是preferrable具有synchronized
方法或同步于this
上,并且锁定private static
实例变量是preferrable具有static synchronized
方法或实例方法用于同步上this.getClass()
。原因是this
和this.getClass()
是在整个程序中都可以访问的对象引用,因此任何人都可以在这些对象上进行同步,从而阻塞要调用您的方法的线程。
编辑:另外,请参见下面的@Cowan注释-摘要:如果您确实想锁定该类,则可能要使用synchronized (Worker.class)
而不是synchronized (this.getClass())
,这取决于在子类化的情况下想要的效果。
关于JS的Promise同步调用问题 请问函数 xxx 中没有调用 resolve,也没有调用 reject,那么 yyy 函数运行到 await xxx () 是结束运行还是在一直阻塞? 并没有执行console.log('yyy调用xxx结束', res),请问程序是自动结束了还是阻塞中?
我在Java写程序,有点担心同步。 这个场景非常“简单”,我们有一个简单的银行账户类,多人可以从账户中取款(虽然他们不能存款),他们也可以检查账户余额。问题是,余额一直在变化,因此我们希望客户查看正确的余额! 到目前为止,这是我的班级。 正如您可以看到的,通过这个实现,我可以确保有人可以从一个account对象获得资金,但是这个account对象被阻止了,然后一个解决方案出现了 添加这似乎解决了我
本文向大家介绍Java中的同步关键字,包括了Java中的同步关键字的使用技巧和注意事项,需要的朋友参考一下 当我们在程序中启动两个或多个线程时,可能会出现多个线程尝试访问同一资源,最终由于并发问题,它们可能产生无法预料的结果的情况。例如,如果多个线程试图在同一文件中写入数据,则它们可能会破坏数据,因为其中一个线程可以覆盖数据,或者一个线程同时打开同一文件时,另一个线程可能正在关闭同一文件。 因此,
过去几天我一直在使用java,最近几天我收到了一个问题表单。当我试图在servlet中创建一个类时,包部分显示以下错误"** > 无法解析ObjectInputStreamjava.io.类型。它是从必需的. class文件间接引用的 当我试着评论出 导入javax.servlet.http.HttpServlet; **"部分的错误是去,但我不能扩展的http的servlet类。 此图像显示错误
我想基于输入参数同步一个方法或一个块。 因此,我有一个API,它在post有效负载中有两个长类型的输入(比如id1和id2),可以是原始的,也可以是包装的),可以是JSON。这个API将被多个线程同时或随机地在不同时间调用。 现在如果第一个API调用有ID1=1和ID2=1,同时另一个API调用有ID1=1和ID2=1,它应该等待第一个API调用处理完毕后再执行第二个调用。如果第二个API调用具有
我安装了Android Studio 3.4,在同步gradle时遇到了这个问题。我到处都找不到解决问题的办法。 以下是我收到的错误: “无法解析:com.android。支持:appcompat-v7:28.0.0在项目结构对话框中显示受影响的模块:app” “无法解析:com.android.support。约束:约束布局:1.1.3在项目结构对话框中显示受影响的模块:应用程序” “无法解析: