Java 如何在执行其他任务时将元素添加到被阻止任务的数组中
我正在制作一个简单的多线程程序,我有一个表示任务的字符串数组。每当我按下按钮时,就会创建一个代表任务的字符串并将其添加到数组中,当我松开按钮时,就会执行该任务。但是,由于某些原因,数组始终包含一个元素。 例如,每当我执行task close()并在它完成执行之前单击accelerate,accelerate会在close()完成后立即执行,但在close()完成执行之前不会添加到数组中Java 如何在执行其他任务时将元素添加到被阻止任务的数组中,java,Java,我正在制作一个简单的多线程程序,我有一个表示任务的字符串数组。每当我按下按钮时,就会创建一个代表任务的字符串并将其添加到数组中,当我松开按钮时,就会执行该任务。但是,由于某些原因,数组始终包含一个元素。 例如,每当我执行task close()并在它完成执行之前单击accelerate,accelerate会在close()完成后立即执行,但在close()完成执行之前不会添加到数组中 // Add Accelerate Task To Array btnNewButton_1.addMouse
// Add Accelerate Task To Array
btnNewButton_1.addMouseListener(new MouseAdapter() {
@Override
public void mousePressed(MouseEvent e) {
if (!running) {
label_1.setText("Click start to run Car");
return;
}
list.add("Accelerate2");
DefaultTableModel model = (DefaultTableModel) table.getModel();
String s = list.poll();
model.addRow(new Object[] { s.substring(0, s.length() - 1) });
}
});
// Execute Accelerate Task
btnNewButton_1.addMouseListener(new MouseAdapter() {
@Override
public void mouseClicked(MouseEvent e) {
try {
if (!running) {
label_1.setText("Click start to run Car");
return;
}
accelerate();
} catch (InterruptedException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
}
}
});
// Task that takes some time to get executed
public void close() throws InterruptedException {
while (true) {
if (semaphore == 1) {
semaphore--;
DefaultTableModel model = (DefaultTableModel) table.getModel();
if (table.getRowCount() > 0) {
model.removeRow(0);
}
for (int i = 4; i > 0; i--) {
label_1.setText("windows are closing .");
TimeUnit.MILLISECONDS.sleep(500);
label_1.setText("windows are closing ..");
TimeUnit.MILLISECONDS.sleep(500);
label_1.setText("windows are closing ...");
TimeUnit.MILLISECONDS.sleep(500);
}
label_1.setText("windows are closed");
break;
}
}
semaphore++;
}