synchronized相关内容
我正在寻找一种方法来确保某些代码行始终一起执行(在系统可能切换线程之前). @synchronized 据我所知对此不起作用,因为它只会阻止另一个线程进入该特定块.在我的示例中,我有不同的代码部分相互影响,我想确保它们中的每一个都阻止另一个. 如何实现? 编辑:一个用例可能是我正在播放一个 MIDI 文件.事件在高优先级线程上自动退出.在处理单个事件时,用户可以停止播放器.我想确
..
之前已经发布过类似的问题,但这种情况有所不同 - 静态使用可能会使问题复杂化.只是想看看是否有人对如何处理这个问题有想法.即使我在修改它的两个块周围的列表上使用同步,我也得到了 ConcurrentModificationException. 公共类 Foo {公共无效注册(){FooManager.addFoo(this);}}公共课 ABC1 {静态 Foo myfoo;静止的 {myfoo
..
假设我们有一个对象 foo: class Foo(){公共同步 void instanceMethod(){}}var foo = new Foo(); 如果我锁定了 foo: synchronized(foo){foo.instanceMethod();} 我是否也锁定了 instanceMethod() 调用?另一种提问方式——如果我锁定了 foo,另一个线程可以调用 foo.inst
..
在阅读线程并发问题并通过synchronized关键字处理它时,我想到的问题是,当我们使用术语lock时,它用于包含 run 方法(或线程的工作)的对象.但是为什么我们不能将术语 lock 用于定义包含 synchronized 的方法 关键字,因为这个关键字意味着一旦一个线程进入方法,那么这个线程只能在方法完成后被JVM调度器打扰? 我正在从头开始学习java,那里写着“对象被锁定"的行,
..
仅限 Java 5 及更高版本.假设有一台多处理器共享内存计算机(您现在可能正在使用一台). 这里是单例延迟初始化的代码: public final class MySingleton {私有静态 MySingleton 实例 = null;私人 MySingleton() { }公共静态 MySingleton getInstance() {如果(实例 == 空){同步(MySingle
..
Java 中是否有同步的 Queue 类?我正在寻找类似 Vector(它是同步的)与 ArrayList(它不是)之类的东西,而不是实现 List 接口,我正在寻找它来实现 Queue. 请注意,没有 Collections.synchronizedQueue 方法可以包装未同步的队列并使其同步. 解决方案 查看 ArrayBlockingQueue 和另一个 BlockingQu
..
当同步块执行完成时,所有处理器缓存都会被刷新,还是只有同步语句作用于其上的对象才会被刷新?在下面的例子中,当线程完成method2的执行时,obj2的数据是否也刷新到主内存? class cls1 {整数 x=10;}类 cls2{int y=10;}类 cls3{cls1 obj1;cls2 obj2;公共无效方法2(){obj2.y=10;同步(对象1){obj1.x=30;}}公共静态无效
..
我想用 Java 做这样的事情 public void giveMoney(String userId, int money) {同步(用户 ID){配置文件 p = fetchProfileFromDB(userId);p.setMoney(p.getMoney() + userId);saveProfileToDB(p);}} 当然,同步字符串是不正确的.做这样的事情的正确方法是什么?
..
我正在清理遗留的 Java 代码,我发现了以下结构: final class QuietComplexClass {私有对象锁=新对象();void aMethod() {...同步(锁){....}}} 这里需要加锁的特殊对象吗?当我使用简单的 synchronized (this) 时有什么不同? 我认为当类是公开可见的并且有人可能错误地在类实例上调用 synchronized 时,
..
我可以问一个 Java 新手问题吗? 我正在从网上下载一些文件.此方法下载(网址位置)被多次调用. public static void download(final String url) {线程 t = 新线程(“下载"){@覆盖公共无效运行(){尝试 {同步(对象){//下载 &保存}} catch(Exception e) {}}};t.start();} 我添加了“同步",以便
..
我有一个包含多个工作线程的程序和一个接收作业的主线程.在主线程中,我想将作业排队到一个同步队列中,并让所有工作线程都坐在那里等待队列.当队列中有东西时,我希望工作人员从队列中提取作业,而其余的工作则坐在那里等待另一份工作. 我找到了 CreateMsgQueue (http://msdn.microsoft.com/en-us/library/ms885180.aspx) 但是这似乎只适用于
..
以下代码显示了与此不同对象的同步: 公共类 A {输入 a,b,c,d;公共无效方法1(对象x){同步(x){//a ,b ,c ,d 是否保证可见性?}}公共同步无效方法2(){一个++;}} 我知道编辑 a、b、c、d 会出现问题,因为在 method1 和 method2 中有不同的锁定,但问题是 method2 刷新的更改对 method1 是否可见?因为他们不使用相同的锁. 解
..
公共类替代{静态布尔互斥量 = 真;公共静态无效主(字符串 [] args){线程 t1 = new Thread(new Odd(mutex));线程 t2 = new Thread(new Even(mutex));t1.start();t2.start();}}类 Odd 实现 Runnable{布尔互斥量;奇数(布尔互斥){this.mutex=互斥锁;}@覆盖公共无效运行(){尝试 {同
..
我正在尝试编写一个方法,该方法要求设备输入然后接受响应,所有这些都是原子操作. 这是我的代码(query 方法才是真正应该关注的): 公共类 DeviceConnection 实现 Runnable{//查询静态 int 测试 = 0;//对于写行静态 PrintWriter out = null;//(在构造函数中初始化)//只对readline重要静态字符串[] systemMessa
..
这是我偶然发现的代码: class TransactionContextHolder {私有静态最终 ThreadLocalcurrentTransactionContext = new NamedInheritableThreadLocal("测试事务上下文");静态 TransactionContext getCurrentTransactionContext() {返回 currentTr
..
我的程序是这样的: public class Main {私有静态 ArrayList列表;公共静态无效主(字符串 [] args){新数据监听器().开始();new DataUpdater().start();}静态类 DataListener 扩展线程 {@覆盖公共无效运行(){而(真){//读取ArrayList并显示更新后的数据线程睡眠(5000);}}}静态类 DataUpdater
..
我有两种方法:a() 和 b().虽然我可以让多个线程同时访问任何方法(这是可取的),但我不希望任何线程在 b() 时输入 a()代码>正在执行.我该怎么做? 编辑 1 假设有 4 个线程并且 Thread 1 正在访问 A().我想要的是所有 4 个线程都不应使用 B(). 解决方案 检查底部的更新 - 我认为这种方法行不通.留下它以获取信息. 您可以使用 信号量:
..
最近,我正在阅读 JSR-133食谱关于Doug Lea的 JSR 133的编译器作家 :JavaTM内存模型和线程规范修订版 . 我在这里读到了这一行: 内存障碍本身不是“同步障碍" 我搜索了一些有关内存障碍和同步障碍之间差异的资源,但找不到任何好的方法.我也无法确定同步障碍与Java与其他语言的比较是否有任何区别. 解决方案 首先,正如@markspace所指出的那样
..
在一个高度并发的Java程序中,并假设我的方法正确编写并正确同步,我想知道如何确定哪个更好: void同步某事(){...} 或 void something(){已同步(this){...}//这里不需要同步..//做计算'A'.已同步(this){...}//在这里做其他不需要同步的工作..//做计算'B'.已同步(this){...}} 现在我意识到,如果计算'A'和'B'花
..
我想知道这个表达式是否正确以及它是否意味着:我对字段状态设置了写锁定,然后我对其进行了更改.如果没有,我想知道参数的含义,因为我总是看到 this . 公共类示例{私人int身份;公开示例(int状态){this.status =状态;}公共无效setStatus(int newStatus){已同步(this.status){this.status = newStatus;}}} 解决方案
..