请帮我处理我的代码。我正在参加比赛 比赛起点和终点线有2个点。所有的马都从大门开始,然后前往大门。只有所有的马到达大门后,比赛才会开始。首先获胜的人将赢得比赛。
答案 0 :(得分:1)
你遇到的错误就是你在这里提供的号码
gate= new CyclicBarrier(numHorses);
什么是numHorses?
这是所有马的数量,但在这里:
list.removeIf(...);
你正在移除18岁以下的马匹,假装我们总共有5匹马,numHorses==5
是真的,其中两个不到18岁,所以我们留下了3匹。
你创建了三个线程,但是屏障设置为5,屏障永远不会被传递,因为当只有三个线程时它会等待5个线程。
解决方法是让addHorsesToList
在没有障碍的情况下添加马匹(因此您需要一个没有障碍的Horse
构造函数),然后将gate = new CyclicBarrier
移到{{1}之后并将list.removeIf
更改为numHorses
。
之后,您将屏障分配给list.size()
中每个马对象的gate
字段。
这样做:
list