黑马程序员技术交流社区

标题: 银行7千 [打印本页]

作者: 霍明波    时间: 2012-8-23 16:02
标题: 银行7千
本帖最后由 霍明波 于 2012-8-23 16:05 编辑

import java.util.ArrayList;
import java.util.List;
public class NumberManager
{
        private int lastNumber = 1;
        private List<Integer> queueNumber = new ArrayList<Integer>();
        public synchronized int generateNewManager()
        {
                queueNumber.add(lastNumber);
                return lastNumber++;
        }
        public synchronized int fetchServiceNumber()
        {
                return queueNumber.remove(0);
        }
}
此程序为张老师7k银行-4中的程序其中红字,为什么用synchronized,张老师说什么互斥的,不是太懂,请明白的告诉我问题所在,解释下互斥怎么回事,在解释下queueNumber.remove(0)方法。。。。。。多谢

作者: 刘源    时间: 2012-8-23 16:39
你想想啊,这个题目的银行窗口有6个和很多个排队的号码,但一个窗口只能处理1个号码,如果你不加synchronized的话,就会出现好几个窗口执行一个号码,或者好几个号码在一个窗口里执行的情况。
作者: 周世阳    时间: 2012-8-23 20:34
1).被synchronized标记的方法或代码在同一时间只能被一个进程访问执行,只有当这个进程执行完了这个方法或代码,其他进程才能进入这个方法或进程来执行
2).queueNumber.remove(0)方法则是删除索引(这里为0)指向的对象,对把这个对象作为返回值返回
作者: 朱烈葵    时间: 2012-8-23 20:42
呵呵 我来,我来,我想楼主的意思,这他妈的什么意思?呵呵!  简单来说就是 synchronized  这是关键字,被这个修饰的函数相当于给函数加锁,假设AB两线程,A线程没出去,B就进步不来,明白了吗?要么你进去,要么我进去,哈哈!所以就互斥了。
作者: 任文杰    时间: 2012-8-23 20:44
synchronized的作用就是某个人在某一时刻只能被一个窗口服务,不能同时被其它窗口服务。方法fetchServiceNumber()就是取得将要服务的号码,某个窗口取号时,其它窗口不可以取号,只能排队等候。
作者: 霍明波    时间: 2012-8-24 16:01
RWJ2012 发表于 2012-8-23 20:44
synchronized的作用就是某个人在某一时刻只能被一个窗口服务,不能同时被其它窗口服务。方法fetchServiceNu ...

但是好像是要有对象一样才可以同步的啊,他们好像是两个对象,如果不是的话对象指的是什么呢
作者: 霍明波    时间: 2012-8-24 16:01
朱烈葵 发表于 2012-8-23 20:42
呵呵 我来,我来,我想楼主的意思,这他妈的什么意思?呵呵!  简单来说就是 synchronized  这是关键字,被 ...

素质。。。
作者: 朱烈葵    时间: 2012-8-24 19:48
霍明波 发表于 2012-8-24 16:01
素质。。。

e..................




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2