多线程(四)

来源:互联网 发布:知乎隐私设置 编辑:程序博客网 时间:2024/04/28 04:50

多线程操作中 ,2个不同的线程 在 线程一.start() ; 线程二.start() ; 这种顺序下,我以前以为 在控制台输出都是先 线程一的代码先被输出, 线程二的后输出, 后来经过几次试验 ,发现不是. 这也是随机的 我试了2次, 一次是一的先被输出 , 另一次就是 二的先被输出.

 

            同步有一个比较经典的范例 --> 那就是生产者与消费者

            一个线程向数据存储空间添加数据(生产者), 另一个线程从数据存储空间取出数据(消费者).

         这种程序有两种情况需要考虑:

     (1) 假设生产者刚向数据存储空间存储了一个人的姓名 还没来得及输入性别, CPU就切换到了消费者线程,消费者会错误的把这个人的姓名和前一个人的性别联系在一起;

     (2) 生产者都放了好几条数据了, 但是消费者才开始取数据,这样的话就不能把生产者生产出的数据一一的取出来了;

     (3) 消费者取完一个数据, 还没等生产者生产出一条新的数据, 消费者就又去取出一条信息. 这样去除了一条重复的数据, 不好!