楼主你好
希望可以帮到你
问题:为什么会出现一大片一大片的 男那女女 这样的情况?
分析:
当某一个线程获得执行权的时候,并不会只输出1次,CPU是随机切换的,所以只有在CPU在某一个时刻切换到另一个线程时候,
才会终止当前,而后继续大片片的执行另一个线程。总体来说就是线程并发的抢占性和CPU处理数据的随机性共同造成的这样的局面。
解决:
1:给资源类加个标记。类似与开关,真代表有货,假代表没货。
2:input类,同步代码块里,判断:
若有货(标记为真)则不拉煤进去(给我在外面等着wait()),
若没货,(标记为假),兄弟们给我拉煤进去(往里存数据),
存完后记得记录下,说明里头有货了(flag=true),说明里头有货了,哥们儿不要再往里存了。
3:output类,同步代码块里:判断,
若没货,哥们儿在外面等(flag=非真),货都没有咱取不了啊。
若有货,哥们就进去取,(flag=非假), 有货哥们儿才能进仓库取啊,但是取完后记录下,取完后里面没货了(flag=false) 哥们儿些别往仓库里冲了。 |