本帖最后由 pandapan 于 2014-5-17 21:28 编辑
这位同学,应该是刚接触java吧。下面我把这个里面的存在的目前发现的问题列举出来
1. 你的这段代码应该是没有编译过的吧,或者说只是用UE或者EditPlus编写的,一般情况下我们是不直接写try finally代码的,这样是完全没有异常处理的代码的,那么就算有异常,我们是怎么发现的呢?
2. 类的命名不符合规则,货物类单词拼写的是对的,goods,但是记得要大写的,童鞋。应该是Goods(不要小瞧这些细节,面试的时候,假如面试官看你写这样的代码,会很生气的,因为有通用的规则,大家都是遵守的,凭什么我们例外的?)
3.需求理解有一定的偏差,或者说理解了需求,实现的有偏差。通过浏览你的代码,我是否可以反推出这样的需求呢?
3.1 业务背景
在日常生活中呢,很普通的一个事情就是生产者和消费者的故事了,生产者负责生产,消费者负责消费,生产和消费的是随机的,就是生产者生产一个后,便开始停工,等着消费者完成后再继续生产。请模拟这样的过程。
3.2 需求分析
看到这个问题,我们分析的结果如下,生产者呢,负责生产商品,消费者呢,负责消费商品,这是不同的操作,却要同时进行,因而考虑使用多线程,在取的过程和消费的过程可能会发生冲突,因而考虑到要加锁。这是大概的设计。由于生产者生产了一个后,便停用,等着消费者消费,便没有商品的多少和商品的队列的信息的维护,我们用一个标记(Flag)描述即可.3.3 设计(这里的设计我就不怎么说了,因为楼主设计的整体思路应该是有的,但是感觉是缺乏基本知识的理解)
设计呢,首先便要知道多线程的基本知识,
(1)在不同的线程中加锁呢,要加同样的锁,如果锁不同的话,那么加锁就没有意义了,楼主这里在生产者和消费者中使用了不同的锁,因为都是在自己的类中创立的,因而有Lock创建的Condition肯定也是有问题的。
你的代码我进行了如下的改进,可以运行了,希望能够帮到你.希望楼主能够先学习学习同步代码块的知识,这样再学习Lock和Condition的知识会很快的。
|