您的位置:首页 > 编程语言 > Java开发

java双线程调用同一个对象+锁

2015-11-08 22:13 330 查看
两个线程(Thread)调用同一个对象(使用Runnable接口的对象ThreadJob)

误区:下一个线程会从上一个线程结束的地方开始

正解:如

class TestSync implements Runnable{
int balance;

public void run{

for(int i = 0; i < 20; i++){
increment();
}
}

public void increment{
int i = balance;
balance = i + 1;
}

}


View Code
i = balance;

balane = i + 1

当A线程在i = balance停下来sleep(),假如i被赋值为5

B线程让i被赋值为5,接着把balance改成6

继续改成7

当A线程醒来,继续刚才i=5,接着balance被改成6

//出现覆盖

因此,解决办法:锁(synchronized 原子化--不可分割)

对一个方法public synchronized void increment()

能保证A线程即使sleep(),B线程也无法存取该对象,A醒来后继续
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: