使用synced(obj)和声明的锁之间的区别

时间:2019-01-12 09:47:15

标签: java multithreading object synchronization locking

我正在尝试同步此run()方法。我希望一次只输入一个线程,但是我不明白为什么该解决方案告诉我使用 synchronized(obj)方法:

iOS

我的想法是创建一个锁并以这种方式对其进行同步:

APICoreKt.createRequest(callback: self) { (s) -> Nothing in
 let lbl = UILabel(frame: CGRect(x: 100, y: 100, width: 100, height: 100));
 lbl.text = s;
 lbl.textColor = UIColor.black;
 self.view.addSubview(lbl);
 return KotlinUnit();

}

但是它不起作用,因为线程交替打印for的内容。这怎么可能?如果我在run方法的开头使用lock(),第一个线程是否不应该完成for的操作,然后释放该锁,然后让第二个线程进入该方法?

1 个答案:

答案 0 :(得分:2)

使用

public synchronized void run() {

的简写
public void run() {
    synchronized (this) {

由于this对于每个具有锁定的对象都是不同的,因此它们彼此独立。换句话说,它对您没有任何帮助。