Một màn hình được đề cập đến trong lập trình đồng thời trong Java là gì?
Khi tôi đọc rằng "mọi đối tượng đều liên kết với màn hình" nghĩa là gì?
Nó có phải là một đối tượng đặc biệt?
Một màn hình được đề cập đến trong lập trình đồng thời trong Java là gì?
Khi tôi đọc rằng "mọi đối tượng đều liên kết với màn hình" nghĩa là gì?
Nó có phải là một đối tượng đặc biệt?
Câu trả lời:
Một màn hình là cơ chế để kiểm soát truy cập đồng thời vào một đối tượng.
Điều này cho phép bạn làm:
Chủ đề 1:
public void a()
{
synchronized(someObject) {
// do something (1)
}
}
Chủ đề 2:
public void b()
{
synchronized(someObject) {
// do something else (2)
}
}
Điều này ngăn Chủ đề 1 và 2 truy cập vào phần được theo dõi (đồng bộ hóa) cùng một lúc. Một cái sẽ bắt đầu và màn hình sẽ ngăn người kia truy cập vào khu vực trước khi cái đầu tiên kết thúc.
Nó không phải là một đối tượng đặc biệt. Đó là cơ chế đồng bộ hóa được đặt ở cấp bậc phân cấp lớp : java.lang.Object
.
Ngoài ra còn có wait
và notify
các phương thức cũng sẽ sử dụng màn hình của đối tượng để liên lạc giữa các luồng khác nhau.
Class
đối tượng tương ứng cho các phương thức tĩnh. Nếu bạn đã có phương thức được đồng bộ hóa 1 () và bạn khai báo phương thức 2 () được đồng bộ hóa, không có màn hình mới nào được tạo và trên thực tế, việc gọi một trong hai phương thức (trên cùng một đối tượng) sẽ cố gắng khóa cùng một màn hình. Điều này thường bắt những người mới.
Một màn hình là một thực thể sở hữu cả khóa và bộ chờ . Trong Java, bất kỳ Object
có thể phục vụ như một màn hình.
Để được giải thích chi tiết về cách các màn hình hoạt động trong Java, tôi khuyên bạn nên đọc phần Cơ chế giám sát của Lập trình đồng thời trong Java (liên kết trước hiển thị bản xem trước trong sách của Google và phần đó có sẵn để đọc).
Wakes up all threads that are waiting on this object's monitor.
về notifyall (), những gì tôi nhận được là đối tượng đang duy trì (với sự trợ giúp của thực thể / đối tượng bên trong) tất cả các luồng đang chờ khóa, thực thể / đối tượng bên trong đó được gọi là màn hình?
Ngôn ngữ Java và hệ thống thời gian chạy hỗ trợ đồng bộ hóa luồng thông qua việc sử dụng màn hình.
Một màn hình được liên kết với một mục dữ liệu cụ thể (một biến điều kiện) và hoạt động như một khóa trên dữ liệu đó. Khi một luồng giữ màn hình cho một số mục dữ liệu, các luồng khác sẽ bị khóa và không thể kiểm tra hoặc sửa đổi dữ liệu.
http://java.sun.com/docs/books/jvms/second_edition/html/Con accept.doc.html # 33308
Một cơ chế để kiểm soát truy cập vào các đối tượng cùng một lúc
Màn hình là một cấu trúc đồng bộ hóa cho phép các luồng có cả loại trừ lẫn nhau và khả năng chờ (chặn) để một điều kiện nhất định trở thành đúng.
Màn hình cũng có một cơ chế để báo hiệu các luồng khác rằng tình trạng của chúng đã được đáp ứng. Nó là một thực thể sở hữu cả khóa và bộ chờ. Trong Java, bất kỳ Đối tượng nào cũng có thể đóng vai trò là màn hình.
Trong máy ảo Java, mọi đối tượng và lớp được liên kết logic với một màn hình. Để thực hiện khả năng loại trừ lẫn nhau của màn hình, một khóa (đôi khi được gọi là mutex) được liên kết với từng đối tượng và lớp. Đây được gọi là semaphore trong các thuật ngữ hệ điều hành, mutex là một semaphore nhị phân.
http://journals.ecs.soton.ac.uk/java/tutorial/java/threads/monitor.html
màn hình được liên kết với đối tượng hoặc thành viên dữ liệu, có được khi thành viên dữ liệu hoặc đối tượng được nhập là khối đồng bộ hóa (phần quan trọng) và giải phóng khi thoát.