1
1
两者的利弊 第一选择优点:允许锁定概念,而不是对象。如果您必须为一个动作锁定多个资源(通常不建议这样做,但有时是必要的),那么您可以这样做,而不用太担心种族状况。 缺点:对象仍然可以修改,因此您需要确保对对象的访问被限制在遵守外部锁的方法中。
第二个选项的优点:锁定对象应该防止其他人修改它(尽管你应该仔细检查确切的符号)。编辑:与上面相同的配置-如果方法不是
缺点:您阻止了对所有方法的访问,甚至那些与您试图操作的内容无关的方法,这可能会导致速度变慢,并可能导致死锁。但是,您可以很容易地得出这样的结论:如果是这样的话,您的对象正在做太多的工作,应该被分解。 编辑:请允许我在此澄清第2部分(将mytype分解为myfoo,mybar将公开讨论…)
就个人而言,我更经常使用选项1(这就是为什么我不确定选项2中的这一部分)。 |
2
1
我看到的唯一问题是,使用
否则应该可以,但是如果您仍然只需要一个锁,那么只需在
顺便说一句,你是故意让你
|
3
0
是的,你完全可以做到。 事实上,它提高了清晰度,减少了杂波。 |
4
0
如果我记得对的话,synchronized是一个监视器,它允许在同一个JVM中的任何给定时间只有一个线程可以访问该对象。所以我认为您只访问shardresouce,在shardresouce上同步就足够了。 |
5
0
就个人而言,我通常不会在任意锁上同步。也就是说,我通常会按照你的第二种方法做一些事情:
当然,在运行同步代码之前,必须获取目标对象的锁。可以说,通常情况下,我会把锁“放下”一步。也就是说,我将在“SharedResource”中的方法上进行同步,如:
但是,当涉及到这类事情时,很难进行归纳,因为每个规则都有例外。最后,您的总体架构需求将决定应该在哪里进行锁定。对我来说,最常见的情况是,我发现自己正在同步访问共享资源的顶级方法,因此,锁定一个只做锁的对象更为罕见。 编辑:小语法修复 |
J. Defenses · 节点JS,NeDB-如何使同步返回到父模块 6 年前 |
StefanoN · Java多线程-按顺序只运行一次线程运行方法 6 年前 |
merlin2011 · Android线程方法是否隐式同步? 6 年前 |
ninbura · ffmpeg-时间码和分数帧速率(复制帧) 6 年前 |
ninbura · 分段时音频缓慢去同步 6 年前 |