2011-07-06 35 views
5

Tôi muốn triển khai hàng rào java tùy chỉnh. Tôi không muốn sử dụng số CyclicBarrier class.Triển khai rào cản java tùy chỉnh

Vì vậy, tất cả các chuỗi gặp nhau tại một điểm chung. Các chủ đề chỉ tiến hành nếu tất cả các chủ đề đến hàng rào.

Tôi muốn sử dụng các phương thức wait/notify/notifyAll để triển khai rào cản.

Vì vậy, đây là những gì tôi đã đưa ra

public class Barrier{ 

    private final int threadNumber; 

    public Barrier(int pThreadNumber){ 
     this.threadNumber = pThreadNumber; 
    } 

    public synchronized void barrier(){ 
     wait(); 
    } 

    public synchronized void releaseBarrier(){ 
     notifyAll(); 
    } 

    public synchronized void releaseThread(){ 
     notify(); 
    } 
} 

Nhưng tôi thực sự không hiểu làm thế nào để đạt được điều đó một số lượng nhất định các chủ đề được dừng lại cho đến khi tất cả chủ đề đến. Có thể thực hiện một rào cản chỉ bằng cách chờ/thông báo/thông báo tất cả không?

+2

Đây có phải là bài tập về nhà không? Hoặc tại sao bạn không muốn sử dụng CyclicBarrier? – meriton

+0

Tôi chỉ cố gắng để có được vào các chủ đề java và đồng thời và điều này nghe có vẻ là một bài tập thú vị để học hỏi từ –

Trả lời

3

Sắp xếp bài tập về nhà, vì vậy tôi chỉ đưa ra một gợi ý:

Bạn muốn tất cả các chủ đề để tiến hành khi threadNumber đề đang chờ đợi. Điều này tương đương với các chủ đề threadNumber - 1 đầu tiên đang chờ chủ đề đến hạn cho số threadNumber. Một cách là đếm số lượng chủ đề và thực hiện một điều gì đó đặc biệt sau khi chuỗi chủ đề đến được threadNumber.

0

Một gợi ý bổ sung liên quan đến chi tiết Java: một chuỗi bị chặn trên wait() có thể bị đánh thức giả; xem số Object.wait() javadocs.

Để chịu đựng các lần đánh thức giả mạo, bạn cần có vòng lặp while trong đó logic đơn giản chỉ yêu cầu séc if hoặc mù wait().

Các vấn đề liên quan