题目:
使用 wait notify 实现一个队列,队列有2个方法,add 和 get 。
add方法往队列中添加元素,
get方法往队列中获得元素。队列必须是线程安全的。
如果get执行时,队列为空,线程必须阻塞等待,直到有队列有数据。
如果add时,队列已经满,则add线程要等待,直到队列有空闲空间。
实现这么一个队列,并写一个测试代码,使他工作在多线程的环境下,证明,它的工作是正确的。
分析:队列,阻塞,安全,通知 。看代码,写出来供大家讨论。希望可以抛砖引玉的作用,可以用生产模式来做,题目中一个生产数据,一个消费数据,我用
自己的方法实现,由于本人能力有限,希望大神给予指导。针对这个题目有一些好的建议。
/*
* .使用 wait notify 实现一个队列,队列有2个方法,add 和 get 。add方法往队列中添加元素,get方法往队列中获得元素。
* 队列必须是线程安全的。 如果get执行时,队列为空,线程必须阻塞等待,直到有队列有数据。如果add时,队列已经满,则add线程要等待,直到队列有空闲空间。
* 实现这么一个队列,并写一个测试代码,使他工作在多线程的环境下,证明,它的工作是正确的。给出程序和运行的截图。
*/
接着:
运行结果如下:
往队列中放的是woshi--1
我从队列中取的数据是---woshi--1----size=0
往队列中放的是woshi--1
我从队列中取的数据是---woshi--1----size=0
往队列中放的是woshi--2
往队列中放的是woshi--2
往队列中放的是woshi--3
往队列中放的是woshi--4
往队列中放的是woshi--5
往队列中放的是woshi--6
我从队列中取的数据是---woshi--2----size=5
我从队列中取的数据是---woshi--2----size=4
我从队列中取的数据是---woshi--3----size=3
我从队列中取的数据是---woshi--4----size=2
我从队列中取的数据是---woshi--5----size=1
我从队列中取的数据是---woshi--6----size=0
往队列中放的是woshi--7
往队列中放的是woshi--8
往队列中放的是woshi--9
往队列中放的是woshi--10
往队列中放的是woshi--11
往队列中放的是woshi--12
往队列中放的是woshi--13
我从队列中取的数据是---woshi--10----size=6
我从队列中取的数据是---woshi--11----size=5
我从队列中取的数据是---woshi--12----size=4
我从队列中取的数据是---woshi--13----size=3
我从队列中取的数据是---woshi--7----size=2
我从队列中取的数据是---woshi--8----size=1
我从队列中取的数据是---woshi--9----size=0
往队列中放的是woshi--3
往队列中放的是woshi--4
往队列中放的是woshi--5
往队列中放的是woshi--6
往队列中放的是woshi--7
往队列中放的是woshi--8
我从队列中取的数据是---woshi--3----size=5
我从队列中取的数据是---woshi--4----size=4
我从队列中取的数据是---woshi--5----size=3
我从队列中取的数据是---woshi--6----size=2
我从队列中取的数据是---woshi--7----size=1
往队列中放的是woshi--9
往队列中放的是woshi--10
我从队列中取的数据是---woshi--10----size=2
我从队列中取的数据是---woshi--8----size=1
我从队列中取的数据是---woshi--9----size=0
往队列中放的是woshi--14
往队列中放的是woshi--15
我从队列中取的数据是---woshi--14----size=1
我从队列中取的数据是---woshi--15----size=0
往队列中放的是woshi--16
我从队列中取的数据是---woshi--16----size=0
往队列中放的是woshi--11
我从队列中取的数据是---woshi--11----size=0
往队列中放的是woshi--12
我从队列中取的数据是---woshi--12----size=0
往队列中放的是woshi--17
往队列中放的是woshi--18
我从队列中取的数据是---woshi--17----size=1
我从队列中取的数据是---woshi--18----size=0
往队列中放的是woshi--19
我从队列中取的数据是---woshi--19----size=0
往队列中放的是woshi--13
我从队列中取的数据是---woshi--13----size=0
往队列中放的是woshi--14
我从队列中取的数据是---woshi--14----size=0
往队列中放的是woshi--15
我从队列中取的数据是---woshi--15----size=0
往队列中放的是woshi--16
我从队列中取的数据是---woshi--16----size=0
往队列中放的是woshi--17
我从队列中取的数据是---woshi--17----size=0
往队列中放的是woshi--18
我从队列中取的数据是---woshi--18----size=0
往队列中放的是woshi--19
我从队列中取的数据是---woshi--19----size=0
停止后线程处于阻塞状态,程序还没有停掉。