生产-消费模型

生产者也就是产生数据的某个事件,
消费者即为消费数据,处理数据的事件。


在绘制离子仿真过程中,简单实现这样的效果
生产-消费模型_第1张图片
有许多个线程如生产线程createThread、绘图线程drawThread、移动线程moveThread、颜色线程colorThread、大小线程sizeThread,那么这其中的生产者则是生产线程,负责在鼠标点击触发事件是产生小球对象 ,并将其放入ArrayList中,
生产-消费模型_第2张图片
消费则是其余的线程,各自负责不同的功能,将ArrayList中的数据取出进行修改。
那么在某个线程中我要获取这个ArrayList中的数据个数,能准确获取的到么?
就好像商场里的顾客,在某一时刻,你能统计出商场里顾客的总数么?很显然是不太可能的,所以想要获取arraylist中某个时刻的数据个数,那么得让其他的生产消费者不能对arraylist进行操作,所以就有synchronized关键字。


synchronized是Java中的关键字,是一种同步锁。它修饰的对象有以下几种:
1. 修饰一个代码块,被修饰的代码块称为同步语句块,其作用的范围是大括号{}括起来的代码,作用的对象是调用这个代码块的对象;
2. 修饰一个方法,被修饰的方法称为同步方法,其作用的范围是整个方法,作用的对象是调用这个方法的对象;
3. 修改一个静态的方法,其作用的范围是整个静态方法,作用的对象是这个类的所有对象;
4. 修改一个类,其作用的范围是synchronized后面括号括起来的部分,作用主的对象是这个类的所有对象

那么,我们在线程中对arraylist加锁,这样该线程操作arraylist时其他线程就不能对其进行操作。
生产-消费模型_第3张图片
当我们在某个线程中需要调用arraylist对象时,只有等待拿到锁的那个线程操作完成后,才可以对arraylist进行操作,其他线程访问arraylist对象时就会阻塞,所以,我们可以在某一时刻准确获取到arraylist中的数据个数。

你可能感兴趣的:(Java学习)