Java在映射中循环并根据给定条件启动线程
我有一个JFrame和两个包含不同配料和菜肴的JTable。我制作的另一个类是KitchenStaff类,它是一个线程,每当有足够的原料库存满足菜谱要求时,就会使用每个菜的配方所需的原料。我还有另一个等级的无人机,可以更新原料的库存水平。问题是,当我启动多个线程时,至少有2种配料需要重新进货,两个线程只重新进货第一种配料。即使完成了,他们也不会费心重新进货。我的代码中是否有任何错误,以及如何使线程在不同的成分上运行Java在映射中循环并根据给定条件启动线程,java,multithreading,swing,Java,Multithreading,Swing,我有一个JFrame和两个包含不同配料和菜肴的JTable。我制作的另一个类是KitchenStaff类,它是一个线程,每当有足够的原料库存满足菜谱要求时,就会使用每个菜的配方所需的原料。我还有另一个等级的无人机,可以更新原料的库存水平。问题是,当我启动多个线程时,至少有2种配料需要重新进货,两个线程只重新进货第一种配料。即使完成了,他们也不会费心重新进货。我的代码中是否有任何错误,以及如何使线程在不同的成分上运行 @Override public void run()
@Override
public void run()
{
while (this.employed)
{
if (!dishStock.getDishStock().isEmpty())
{
for (Map.Entry<SushiDish, Integer> dishEntry : dishStock.getDishStock().entrySet()) {
SushiDish dish = dishEntry.getKey();
int restockLevel = dishEntry.getValue();
if (isDishUnderStock(dish) && areIngredientsEnough(dish))
{
//int prepTime = new Random().nextInt(41) + 20;
int prepTime = 3;
try
{
Thread.sleep(prepTime * 1000);
for (Map.Entry<Ingredient, Integer> ingEntry : dish.getRecipe().entrySet())
{
Ingredient ingr = ingEntry.getKey();
int quantity = ingEntry.getValue();
ingrStock.useIngredient(ingr, quantity);
for(int i = 0; i < ingrStock.getIngredientsInStock().size(); i++)
{
if (ingrTable.getValueAt(i,0).toString().equals(ingr.getName()))
{
ingrTable.setValueAt(ingrStock.getIngredientsInStock().get(ingr), i, 3);
model.fireTableDataChanged();
}
}
}
}
catch (InterruptedException e)
{
}
}
}
}
}
}
@覆盖
公开募捐
{
当(这是受雇的)
{
如果(!dishStock.getDishStock().isEmpty())
{
对于(Map.Entry dishcentry:dishStock.getDishStock().entrySet()){
sushisdish dish=dishcentry.getKey();
int restockLevel=dishcentry.getValue();
如果(是库存不足(盘)和库存不足(盘))
{
//int prepTime=new Random().nextInt(41)+20;
int prepTime=3;
尝试
{
线程睡眠(预处理时间*1000);
对于(Map.Entry ingEntry:dish.getRecipe().entrySet())
{
配料ingr=ingEntry.getKey();
int quantity=ingEntry.getValue();
原料使用成分(原料、数量);
对于(int i=0;i
您应该在主线程上迭代,并为每个Ingredit启动一个新线程,然后您应该非常明显地更改标题,正如它所说:根据给定的条件启动一个线程
。为什么要手动启动它们?@XtremeBaumer没问题,我会像往常一样找到自己的方法。