黑马程序员技术交流社区
标题:
线程同步来帮忙分析下
[打印本页]
作者:
思维
时间:
2014-8-17 14:08
标题:
线程同步来帮忙分析下
本帖最后由 思维 于 2014-8-20 09:48 编辑
今天看张老师的视频,讲到线程同步的问题:顾客提取号码和窗口提取号码,是两个不同的线程,事件相互独立,并且它们访问相同是数据,所以需要加锁让其同步。谁能分析下如果不加锁的话会产生怎么样的错误啊?怎么也想不通
import java.util.*;
//定义号码发生器
public class NumberManager{
//定义上一次的号码
private int lastNumber = 1;
//定义集合,用于存储取出的号码
private List<Integer> queueNumber = new ArrayList<Integer>();
//返回新的顾客所取到的号码
public synchronized Integer generateNewNumber(){
//将顾客取出的号码存储到集合中
queueNumber.add(lastNumber);
return lastNumber++;
}
//返回银行窗口调用的号码
public synchronized Integer fetchNumber(){
Integer number = null;
if(queueNumber.size()>0){
//从集合中提取最先存入的号码
number = queueNumber.remove(0);
}
return number;
}
}
复制代码
作者:
ssy1939
时间:
2014-8-17 22:45
第一个同步 假如两条线程都停在 add上方那 添加时有可能会取到同一张票 第二个同步 假如两条线程都停在 null 的下面 ,remove后,就有可能size变为负
作者:
masai158
时间:
2014-8-17 23:12
打了很多。楼上正解
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2