Синхронизация доступа к одним и тем же файлам, одновременный доступ к разным файлам - PullRequest
0 голосов
/ 03 июля 2019

Я пишу программу сервлета для доступа к файлам для записи на основе запроса, сделанного клиентом. Запрос содержит имя файла. Допустим, 3 запроса сделаны одновременно. Если два из них запрашивают один и тот же файл, то к файлу необходимо обращаться синхронизированным образом, т. Е. Только после того, как завершится обработка любого одного запроса, следующий может быть обработан. Если третий запрос, который также сделан в то же время, запрашивает другое имя файла, он должен обслуживаться одновременно с другим запросом. Как справиться с этим случаем как синхронного, так и одновременного доступа к файлам?

Я пытался использовать синхронизированный блок для доступа к файлу. Но это не разрешает одновременный доступ для запросов с разными именами файлов.

 public class FileServlet extends HttpServlet{

 String FileName="";  

 public void service(HttpServletRequest req, HttpServletResponse res) throws IOException
 { 

    FileName = req.getParameter("file");

    synchronized(FileName){
                //writing on fileName
    }
 }

}

Здесь все запрошенные файлы доступны синхронно. Но я ожидаю одновременного доступа к различным файлам.

1 Ответ

0 голосов
/ 03 июля 2019

Создать класс, который реализует Thread класс или расширяет Runnable интерфейс для доступа к файлу.Затем создайте несколько потоков, используя этот класс, и вызовите join() в каждом потоке для одновременного выполнения всех задач.

Или вы можете использовать:

Map<Type, Type> map = new ConcurrentHashMap<Type, Type>(); //, который является потокобезопаснымдля доступа к ресурсам.

...