synchronized相关内容
我正在与 Julia 合作.IDE 是 Juno. 如果我是对的,@async 可以生成一个任务,它就像一个线程. 所以我们可以这样做: @async 开始# 做点什么1结尾@async 开始# 做点什么2结尾 现在,我需要锁定一个线程.例如,do something1 是将消息推送到列表,do something2 是从同一列表中弹出消息. 这就像 Java 中的 同步.
..
到目前为止,我已经看到了同步块的用法,但最近我了解到使用虚拟对象更可取.我找到了与此相关的以下主题. Java 同步方法锁定对象或方法? 总而言之,在下面的代码中,两个不同的对象不能同时运行 addA 和 addB,因为两者都使用 this 来锁定. private int a;私人int b;公共同步无效 addA(){一个++;}公共同步无效 addB(){b++;} 如果我使
..
我正在尝试学习如何在 java 中暂停和恢复线程.我正在使用一个 Applet,它 implements Runnable 有 2 个按钮“开始"和“停止". public void init(){th = 新线程(这个);th.start();btn_increment = new Button("开始");btn_increment.addActionListener(new ActionL
..
我想要一个布尔值来通知系统的某些部分特定服务已启动. 由于某些奇怪的原因,我收到错误 java.lang.IllegalMonitorStateException: object not locked by thread before notifyAll(). 奇怪的是 notifyAll() 位于一个同步块中,该块控制我调用 notifyAll() 的对象. 我的课是这样开始的
..
如何使 PHP 中的函数同步,从而不会同时执行相同的函数?第二个用户必须等到第一个用户完成该功能.然后第二个用户可以执行该功能. 谢谢 解决方案 这基本上归结为在某处设置一个标志,该函数被锁定并且在第一个调用者从该函数返回之前无法执行.这可以通过多种方式完成: 使用锁定文件(第一个函数锁定一个文件名“f.lok",第二个函数根据该评估检查锁定文件是否存在并执行或不执行) 在数
..
我遇到了这样的代码 同步(obj){obj = 新对象();} 感觉有些不对劲,我无法解释,这段代码是OK还是真的有什么问题,请指出.谢谢 解决方案 这可能不是你想做的.您正在对不再持有引用的对象进行同步.考虑另一个运行此方法的线程:在对 obj 的引用被更新为指向新对象之后,它们可能会进入并尝试锁定.那时,它们正在与第一个线程不同的对象上进行同步.这可能不是您所期望的. 除非您
..
在 Java 中,当我们需要调用 wait/notify/notifyAll 时,我们需要访问对象监视器(通过同步方法或同步块).所以我的问题是为什么 java 不使用同步等待/通知方法来消除从同步块或方法中调用这些方法的限制. 如果这些被声明为同步,它将自动获取监视器访问权限. 解决方案 对于 notify 和 notifyAll,您的想法的问题是,当您通知时,您通常在同一个同步块
..
我一直认为在实现 Runnable 的 java 类中同步 run 方法是多余的.我想弄清楚人们为什么这样做: 公共类 ThreadedClass 实现 Runnable{//其他的东西公共同步无效运行(){而(真)//在线程中做一些事情}}} 这似乎是多余和不必要的,因为他们正在为另一个线程获取对象的锁.或者更确切地说,他们明确表示只有一个线程可以访问 run() 方法.但是既然是run方法
..
每当 SO 上出现关于 Java 同步的问题时,有些人非常急切地指出应该避免使用 synchronized(this).相反,他们声称,最好锁定私有引用. 一些给定的原因是: 一些恶意代码 可能会偷走你的锁(这个很受欢迎,也有一个“意外"变体) 同一类中的所有同步方法使用完全相同锁,会降低吞吐量 你也(不必要地)暴露了很多信息 包括我在内的其他人认为 synchronized
..
这就是问题所在:我们想要一个其条目是线程安全的哈希表. 假设我有一个 的哈希表,并且我想安全地增加其中一个条目线程的值:以下是否可以?: HashMaphashTable = new HashMap(); 然后每当我想增加一个条目时: 同步(hashTable.get("key")){长值 = hashTable.get("key");价值++;hashT
..
我还是 Javascript 的新手.我正在开发一个简单的页面,我在其中单击一个按钮以获取 servlet 上的值并显示它.它运行良好,除非我疯狂地点击按钮.有时,显示结果为空. 我想知道这是否是由同时调用以下相同函数引起的: function loadXMLDoc2(retr) {var xmlhttp;如果(window.XMLHttpRequest){//IE7+, Firefox,
..
假设我有一个带有这样方法的java类(只是一个例子) @Transactional公共同步无效 onRequest(请求请求){如果 (request.shouldAddBook()) {if (database.getByName(request.getBook().getName()) == null) {database.add(request.getBook());} 别的 {throw
..
请参阅此答案.它说: 六个非常糟糕的例子; ... 锁定可变字段.例如同步(对象){ 对象 = ...;} 锁定可变字段有什么问题?如果 object 被声明为 final 但不是一个不可变的类怎么办? 解决方案 这是个坏主意,因为如果另一个线程更改了临界区中的引用,线程将不再看到相同的引用,因此它们不会同步在同一个对象上,从而不受控制地运行.示例: 同步(锁
..
在一篇不错的文章中并发提示,一个例子被优化为以下几行: double getBalance() {帐户acct =验证(名称,密码);同步(acct){返回acct.balance;}} 如果我理解正确的话,同步的重点是确保这个线程读取的 acct.balance 的值是当前的,并且任何对 acct.balance 中对象字段的未决写入也被写入到主内存. 这个例子让我想到了一点:将acc
..
我遇到了这样的代码 synchronized(obj) {obj = 新对象();} 感觉有些不对,我无法解释,这段代码是否正常或确实有什么问题,请指出.谢谢 解决方案 这可能不是您想要做的.您正在同步一个不再持有引用的对象.考虑另一个运行此方法的线程:在对 obj 的引用更新为指向新对象之后,它们可能会进入并尝试锁定.那时,它们在与第一个线程不同的对象上进行同步.这可能不是您所期望的
..
我知道同步方法和同步块之间的区别,但我不确定同步块部分. 假设我有这个代码 class 测试 {私有整数 x=0;私有对象 lockObject = new Object();公共无效incBlock(){同步(锁定对象){x++;}System.out.println("x="+x);}public void incThis() {//与同步方法相同同步(这个){x++;}System.
..
在 Java 8 中,我可以轻松地编写: interface Interface1 {默认无效方法1(){同步(这个){//某物}}静态无效方法2(){同步(Interface1.class){//某物}}} 我将获得我也可以在类中使用的完整同步语义.但是,我不能在方法声明中使用 synchronized 修饰符: interface Interface2 {默认同步 void method
..
在 Java 中,如果同步方法包含对非同步方法的调用,那么另一个方法是否仍然可以同时访问非同步方法?基本上我要问的是同步方法中的所有内容都对其进行了锁定(包括对其他同步方法的调用)? 解决方案 如果一个同步方法调用了另一个非同步方法,那么非同步方法是否有锁 答案取决于上下文. 如果你在一个对象的synchronized 方法中,那么其他线程对同样synchronized 的
..
我有超类 Point 和一个 synchronized 方法 draw().Point 的子类是否会继承 synchronized 如果我覆盖它们中的方法 draw() 或者我必须始终编写它? 解决方案 不,您将始终必须编写 synchronized.如果您调用超类的同步方法,这当然是同步调用.synchronized 不是方法签名的一部分. 见http://gee.cs.osweg
..
参考此答案,我想知道这是正确的吗? @synchronized 不会使任何代码“线程安全" 因为我试图找到任何文档或链接来支持这个声明,但没有成功. 对此的任何评论和/或答案将不胜感激. 为了更好的线程安全,我们可以使用其他工具,这是我知道的. 解决方案 @synchronized 如果使用得当,确实可以使代码线程安全. 例如: 假设我有一个访问非线程安
..