www.updatesofts.com
!
"
+
&
bộ.
Một số điểm cần nhớ trong khi sử dụng phương thức
wait():
Luồng đang gọi đưa vào CPU
Luồng đang gọi đưa vào khóa
Luồng đang gọi đi vào vùng đợi của monitor.
Các điểm chính cần nhớ về phương thức
notify()
Một luồng đưa ra ngoài vùng đợi của monitor, và vào trạng thái sẵn sàng.
Luồng mà đã được thông báo phải thu trở lại khóa của monitor trước khi nó có
thể bắt đầu.
Phương thức notify() là không chính xác, như là nó không thể chỉ ra được luồng
mà phải được thông báo. Trong một trạng thái đã trộn lẫn, luồng có thể thay đổi
trạng thái của monitor trong một con đường mà không mang lại kết quả tốt cho
luồng đã được đưa thông báo. Trong một số trường hợp này, các phương thức
của monitor đưa ra 2 sự đề phòng:
o
Trạng thái của monitor sẽ được kiểm tra trong một vòng lặp “while” tốt
hơn là câu lệnh if
o
Sau khi thay đổi trạng thái của monitor, phương thức notifyAll() sẽ được
sử dụng, tốt hơn phương thức notify().
Chương trình 8.6 biểu thị cho việc sử dụng các phương thức notify(0 và wait():
Chương trình 8.6
import java.applet.*;
import java.awt.*;
import java.awt.event.*;
/*<applet code = “mouseApplet” width = “100” height = “100”> </applet> */
public class mouseApplet extends Applet implements MouseListener{
boolean click;
int count;
public void init() {
super.init();
add(new clickArea(this)); //doi tuong ve duoc tao ra va them vao
add(new clickArea(this));//doi tuong ve duoc tao ra va them vao
addMouseListener(this);
}
public void mouseClicked(MouseEvent e) {
}
public void mouseEntered(MouseEvent e) {
}
public void mouseExited(MouseEvent e) {
}
public void mousePressed(MouseEvent e) {
synchronized (this) {
click = true;
notify();
}