Ngoài khóa API truy cập đồng thời cũng hỗ trợ Cột đếm. Trong khi đó, ổ khóa thường cấp quyền truy cập độc quyền cho các biến hoặc các nguồn lực, một semaphore là khả năng duy trì toàn bộ giấy phép. Điều này rất hữu ích trong các tình huống khác nhau, nơi bạn có để hạn chế số lượng truy cập đồng thời vào một số phần của ứng dụng của bạn. Dưới đây là một ví dụ làm thế nào để hạn chế quyền truy cập vào một nhiệm vụ dài chạy mô phỏng bằng giấc ngủ (5): ExecutorService thi hành = Executors.newFixedThreadPool (10) ; semaphore semaphore = new semaphore (5); Runnable longRunningTask = () -> { boolean giấy phép = false; try { giấy phép = semaphore.tryAcquire (1, TimeUnit.SECONDS); if (giấy phép) { System.out.println ( " semaphore mua lại "); giấc ngủ (5); } else { System.out.println (" không thể có được semaphore "); } } catch (InterruptedException e) { ném IllegalStateException mới (e); } finally { if (giấy phép) { semaphore.release (); } } } IntStream.range (0, 10) .forEach (i -> executor.submit (longRunningTask)); stop (thi hành); các chấp hành viên tiềm năng có thể chạy 10 nhiệm vụ đồng thời nhưng chúng tôi sử dụng một semaphore của kích thước 5, do đó hạn chế truy cập đồng thời đến 5. Điều quan trọng là phải sử dụng một thử / cuối cùng khối để phát hành đúng các semaphore ngay cả trong trường hợp ngoại lệ. Thực hiện các kết quả mã trên trong các kết quả sau: semaphore mua semaphore mua semaphore mua semaphore mua semaphore mua không thể có được semaphore không thể có được semaphore không thể có được semaphore không thể có được semaphore không thể có được semaphore các Cột phép truy cập tới các hoạt động chạy dài thực tế mô phỏng bằng giấc ngủ (5) lên đến tối đa là 5. Mỗi cuộc gọi tiếp theo để tryAcquire () trôi qua thời gian chờ đợi tối đa của một thứ hai, kết quả đầu ra giao diện điều khiển thích hợp mà không có semaphore có thể được mua lại. Đây là phần thứ hai trong một loạt các hướng dẫn đồng thời. Nhiều phần sẽ được phát hành trong tương lai gần, vì vậy hãy chờ đợi. Như thường lệ, bạn tìm thấy tất cả các mẫu mã từ bài viết này trên GitHub, vì vậy cảm thấy tự do để ngã ba repo và thử nó bằng cách riêng của bạn.
đang được dịch, vui lòng đợi..
