本帖最后由 思维 于 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;
- }
- }
复制代码 |
|