Ở Java, bất kỳ đối tượng có thể hoạt động như một màn hình - đó là một thực thể với một khóa duy nhất, một hàng đợi mục nhập, và một hàng đợi chờ đợi. Phương pháp một đối tượng mà không qualifed bằng từ khóa đồng bộ có thể được kích hoạt bởi bất kỳ số nào của chủ đề bất kỳ lúc nào, khóa được bỏ qua. Phương pháp đồng bộ của một đối tượng, một và chỉ một chủ đề, người sở hữu các khóa của đối tượng đó, có thể được phép chạy rằng phương pháp tại bất kỳ time;i.e. phương pháp đồng bộ một là loại trừ lẫn nhau. Nếu, vào lúc invocation, chủ đề khác sở hữu các khóa, sau đó gọi thread sẽ được đặt trong trạng thái bị chặn và sẽ được thêm vào hàng đợi mục nhập.Wait(), notify() và notifyAll() phương pháp nên được gọi là cho một đối tượng chỉ khi các chủ đề hiện tại đã có khóa của đối tượng khóa Thời điểm này đôi khi đi không được chú ý bởi vì lập trình sử dụng để gọi các phương pháp từ trong phương pháp đồng bộ hay khối. Nếu không, bạn sẽ nhận được "java.lang.IllegalMonitorStateException: chủ đề hiện tại không phải chủ sở hữu" tại thời gian chạy.Khi một sợi chạy trong một phương pháp đồng bộ của một đối tượng gọi phương pháp wait() của cùng một đối tượng, chủ đề bản phát hành các khóa của đối tượng và được thêm vào hàng đợi chờ đợi đối tượng đó. Miễn là nó là có, nó ngồi nhàn rỗi. Lưu ý cũng wait() rằng lực lượng các chủ đề để phát hành khóa. Điều này có nghĩa rằng nó phải sở hữu các khóa của một vật thể trước khi gọi các phương pháp wait() của đối tượng đó (cùng). Do đó các chủ đề phải trong một trong các đối tượng được đồng bộ hóa phương pháp hoặc đồng bộ chặn trước khi gọi wait().Khi một chủ đề invokes một đối tượng notify() hoặc phương pháp notifyAll(), một (một chủ đề tùy ý) hoặc tất cả các chủ đề trong hàng đợi chờ đợi của nó được rút khỏi xếp hàng chờ đợi để xếp hàng nhập cảnh. Họ sau đó tích cực cho cho các đối tượng khóa, và một trong đó được khóa đi vào để thực hiện. Nếu không có chủ đề đang chờ đợi trong hàng đợi chờ đợi, sau đó notify() và notifyAll() không có hiệu lực. Trước khi gọi phương pháp notify() hoặc notifyAll() của một đối tượng, một chủ đề phải sở hữu các khóa của đối tượng. Do đó, nó phải trong một trong các đối tượng được đồng bộ hóa phương pháp hoặc đồng bộ khối.Một chủ đề trong hàng đợi chờ đợi của một đối tượng có thể chạy một lần nữa chỉ khi một số khác chủ đề gọi notify() (hoặc notifyAll) các phương pháp của các đối tượng tương tự.Lý do để gọi cho wait() là rằng các chủ đề không muốn thực hiện một khối mã cho đến một nhà nước cụ thể để có thể đạt được. Nó muốn chờ đợi cho đến khi một nhà nước cụ thể để có thể đạt được. Lý do để gọi phương pháp notify() hoặc notifyAll() là rằng các chủ đề sẽ báo hiệu những người khác rằng "một nhà nước cụ thể đã đạt được". Bang là một kênh giao tiếp giữa chủ đề và nó phải là chia sẻ mutable bang.Ví dụ, một sợi đọc dữ liệu từ một bộ đệm và một sợi ghi dữ liệu vào bộ đệm. Đọc dữ liệu chủ đề cần phải đợi cho đến khi dữ liệu văn bản chủ đề hoàn toàn viết một khối dữ liệu vào bộ đệm. Viết chủ đề dữ liệu cần phải đợi cho đến khi các dữ liệu đọc chủ đề hoàn toàn đọc dữ liệu từ bộ đệm. Nếu phương pháp wait(), notify(), và notifyAll() có thể được gọi bằng một phương pháp thông thường, đọc thread gọi wait() và các chủ đề được thêm vào hàng đợi chờ đợi. Tại chỉ cùng một thời điểm, các chủ đề văn bản cuộc gọi notify() để báo hiệu những thay đổi điều kiện. Chủ đề đọc bỏ lỡ sự thay đổi và chờ đợi mãi mãi. Do đó, họ phải được gọi là bên trong một phương pháp đồng bộ hay khối mà là loại trừ lẫn nhau.
đang được dịch, vui lòng đợi..