всякий раз, когда вы изменяете свой список, вы, вероятно, должны поместить этот код в синхронизированный блок.
Один способ сделать это:
synchronized(customer_list) {
customer_list.addFirst(c);
}
Другой, чтобы у вас не былозакодировать это повсеместно:
public synchronized void addCustomerAtStart(Customer c) {
customer_list.addFirst(c);
}
и затем заменить эту функцию.
То же самое, когда вы выполняете customer.up (), похоже, что его также нужно синхронизироватьв противном случае у вас может быть много противоречивого поведения.
Вам даже не нужно использовать этот "mutex.up ()". Совет: Если вам нужно синхронизировать потоки, вы, возможно, захотите взглянутьв CountDownLatch, очень прост в использовании, надежно работает для синхронизации потоков.