У меня есть класс OuterClass
, содержащего List
и есть поток ListWorker
, который запускается в OuterClass
, что добавление некоторых элементов в список. Основываясь на вызове функции на OuterClass
, он должен иметь возможность информировать поток об удалении элементов. Какова наилучшая практика? Цель состоит в том, чтобы не иметь блокирующую структуру данных (без синхронизации) и, следовательно, иметь один поток в списке.шаблона для взаимодействия с резьбой
Class OuterClass {
List<String> list = new ArrayList<String>();
ListWorker worker = new ListWorker(list);
deleteLastElement() {
worker.setDeleteLastElement(true);
}
}
Работник
ListWorker implements Runnable {
private List<String> list;
private volatile boolean deleteLastElement;
public void setDeleteLastElement(boolean deleteLastElement) {
this.deleteLastElement = deleteLastElement;
}
public ListWorker(List<String> list) {
this.list = list;
}
public void run() {
while(true) {
//add random elements
if(deleteLastElement) {
//delete last element
//set the boolean now to false
}
}
}
Может быть, вы можете добавить Commandobject к «workqueue» из wokerThread? Просто настройка булевых кажется мне нестабильной. – Fildor
@Fildor вы можете подробно остановиться на CommandObject? – user592748
Подумайте об этом, как кучу файлов на рабочем столе. Люди приходят и ставят свои Задачи поверх кучи. Работник берет верх и работает на нем ... Люди (= другие темы) не будут заблокированы, но им, возможно, придется ждать, пока их изменения вступят в силу. Вам это нужно? Вы могли бы даже использовать блокирующую очередь, тогда вам нить даже не нужно ждать от спины ... – Fildor