package WaitAndNotify;public class Test {
public static void main(String []args) throws InterruptedException{
waiter w=new waiter();
notifyer n=new notifyer(w);
w.start();
n.start();
}
}
class waiter extends Thread{
public synchronized void run(){
try {
sleep(1000);
System.out.println("Going wait");
wait();
System.out.println("wake up");
} catch (InterruptedException e) {
System.out.println("Interrupt");
}
}
}class notifyer extends Thread{
waiter t;
public notifyer(waiter t){
this.t=t;
}
public void run(){
System.out.println("Going notify");
synchronized (t) {
t.notify();
}
System.out.println("Notify Over");
}
}java编程思想上说 wait应该在notify之前调用否则会产生信号丢失,但是这里运行的时候貌似是notify在等待wait的到来,何解?
public static void main(String []args) throws InterruptedException{
waiter w=new waiter();
notifyer n=new notifyer(w);
w.start();
n.start();
}
}
class waiter extends Thread{
public synchronized void run(){
try {
sleep(1000);
System.out.println("Going wait");
wait();
System.out.println("wake up");
} catch (InterruptedException e) {
System.out.println("Interrupt");
}
}
}class notifyer extends Thread{
waiter t;
public notifyer(waiter t){
this.t=t;
}
public void run(){
System.out.println("Going notify");
synchronized (t) {
t.notify();
}
System.out.println("Notify Over");
}
}java编程思想上说 wait应该在notify之前调用否则会产生信号丢失,但是这里运行的时候貌似是notify在等待wait的到来,何解?
解决方案 »
- Workbook.getWorkbook 一个奇怪的问题
- 远程访问Tomcat服务器
- tomcat为什么会出现这种窗口,晕阿
- 采用 c/s三层模式,怎样识别客户端是否在线啊?
- tomcat和apache整合问题????
- 有谁用javamail做过收信(email)的程序码?是直接接收的,不是从别的邮件服务器下载信件。
- (在线等待,问题解决立刻给分)struts关于动态 radio 与 multibox 的问题.
- 请问封装数据的VO有什么缺点
- 菜MM问题:请问jsp用到数据库,是不是要先设置连接池?
- 我都糊涂了:Servlet、JSP、JavaBean、EJB还有JavaScript他们什么关系啊?
- java程序制作!
- hibernate问题
当w.start()时,waiter类的run方法开始执行,由于需要sleep(1000)。
在waiter类sleep的过程中,notifyer类的run方法开始执行,下面是重点:
就是当notifyer执行到
synchronized (t) {
t.notify();
}
时,发现waiter类正在执行,还没有结束,于是就等待waiter类run方法执行结束后,才继续执行了t.notify();这里主要是synchronized关键字起到了作用,这是锁机制,保护线程安全的。