Java | Фишки и трюки
7.21K subscribers
182 photos
29 videos
6 files
40 links
Java: примеры кода, интересные фишки и полезные трюки

Купить рекламу: https://telega.in/c/java_tips_and_tricks

✍️По всем вопросам: @Pascal4eg
Download Telegram
⌨️ FileLock: блокировка файлов для безопасного доступа

FileLock из java.nio.channels — это инструмент для предотвращения одновременного изменения файла несколькими процессами или потоками. Если ваше приложение работает с общими файлами, FileLock помогает избежать конфликтов.

🔍 Что нужно знать о FileLock?
1️⃣ Поддерживает эксклюзивные и разделяемые блокировки.
2️⃣ Может работать с любыми типами файлов: текстовыми, бинарными и т.д.
3️⃣ Совместим с каналами FileChannel.

📌 Пример использования FileLock:

import java.io.RandomAccessFile;
import java.nio.channels.FileChannel;
import java.nio.channels.FileLock;

public class FileLockExample {
public static void main(String[] args) {
try (RandomAccessFile file = new RandomAccessFile("example.txt", "rw");
FileChannel channel = file.getChannel()) {

// Устанавливаем блокировку
FileLock lock = channel.lock();
System.out.println("Файл заблокирован.");

// Выполняем операции
file.writeBytes("Добавляем данные, пока файл заблокирован...\n");

// Освобождаем блокировку
lock.release();
System.out.println("Файл разблокирован.");
} catch (Exception e) {
e.printStackTrace();
}
}
}


🔗 Ключевые особенности:
1️⃣ Эксклюзивная блокировка: channel.lock() — блокирует файл для всех, кроме текущего процесса.
2️⃣ Разделяемая блокировка: channel.lock(start, size, true) — доступна только для чтения.
3️⃣ Блокировки не являются межпотоковыми; они работают на уровне процесса.

Когда использовать?
- Для работы с общими ресурсами в распределённых приложениях.
- Для предотвращения одновременной записи в файл несколькими процессами.
- Для контроля доступа к критически важным данным.

💡 Совет: Всегда освобождайте блокировку (lock.release()), чтобы другие процессы могли получить доступ к файлу.

#Java #FileLock #nio
Please open Telegram to view this post
VIEW IN TELEGRAM
👍82