Java: Многопоточная синхронизация доступа к связанному списку

#java #synchronization

#java #синхронизация

Вопрос:

Моя методология может быть здесь неправильной (или реализована лучше). Если да, пожалуйста, дайте мне знать о лучшей идее.

Я пытаюсь реализовать программу чтения файлов формы, которая работает с локальными файлами или по сети. Однако некоторые шейп-файлы ОГРОМНЫ, и для их полной загрузки может потребоваться некоторое время. Я хотел бы разделить класс загрузки на его собственный поток. Я также хотел бы, чтобы основной поток извлекал загруженные данные из загрузчика, пока он все еще загружается, чтобы его можно было отобразить немедленно.

Для достижения этой цели я решил, что могу поддерживать связанный список в загрузчике, содержащий элементы, которые уже были полностью загружены. Основной поток может опросить загрузчик, чтобы узнать, были ли загружены какие-либо элементы, и извлечь заголовок связанного списка, который удалит его из загрузчика.

Какие механизмы я могу использовать, чтобы гарантировать, что основной класс и класс loader не пытаются одновременно получить доступ к началу связанного списка? Я знаю, что это связано с синхронизацией, но я полный новичок в потоках Java. Просто нужен кто-то, кто укажет мне правильное направление.

Если у вас совсем другая идея, я весь внимание. Спасибо

Ответ №1:

разве это не похоже на проблему производителя и потребителя? Проще всего будет использовать BlockingQueue

например: используйте концепцию, показанную здесь.. http://www.java2s.com/Code/Java/JDK-6/ProducerandconsumerbasedonBlockingQueue.htm

Комментарии:

1. Они также могли бы использовать java.util.concurrent. Служба завершения. (который делает что-то очень похожее)