我有三种不同的同步方法如下所示。
A:
asyncTask
B:
public synchronized static int addCount1() {
for (int i = 0; i < 10000; i++) {
count++;
}
return count;
}
C:
static void addCount2() {
synchronized (TestDoubleThread.class) {
for (int i = 0; i < 10000; i++) {
count++;
}
}
}
所有这些都可以按照我的预期进行同步。但是,我想知道哪一个更好,哪一个之间有显着差异。特别是对于案例B和案例C.
这是我的完整代码:
void addCount3(String key) {
synchronized (myMap.get(key)) {
for (int i = 0; i < 10000; i++) {
count++;
}
}
}
答案 0 :(得分:4)
addCount2
上同步{p> TestDoubleThread.class
,addCount3
在TestDoubleThread
返回的myMap.get(key)
实例上同步addCount3("A");
。由于您使用addCount2
执行它,因此两个线程在同一对象上同步,因此必须等待另一个线程才能执行该方法。因此它的行为与addCount3(this.jobNmae)
完全相同,它也会在同一个对象上同步。
另一方面,如果将其更改为addCount3
,则每个线程将在另一个对象上同步,因此两个线程将能够同时执行count
,并且function filter(arr, arg1, arg2){
var j = arr.length;
while(j){
if (arr.indexOf(arg1) > -1 || arr.indexOf(arg2) > -1){
arr.splice(j - 1, 1);
}
j--
}
}
会被搞砸。