本帖最后由 汪洋大海 于 2013-12-2 22:48 编辑
你的代码,我改了半天改不正确。。把我的笔记给你看一下吧。希望对你有帮助。。
- /*
- 等待唤醒机制。
- wait() 必须被锁调用,只用于多线程。会抛异常,wait后释放锁。 当锁是this时可以省略不写
- notify() 必须被锁调用,只用于多线程。当锁是this时可以省略不写
- notifyAll() 必须被锁调用,只用于多线程。当锁是this时可以省略不写
- 需求:定义两个线程,一个线程写数据,一个线程取数据。写一个取一个。
- 心得:两个线程用的是同一个对象,所以用的是同一个Demo对象作为锁。也就是this。
-
- */
- class ThreadDemo7
- {
- public static void main(String[] args)
- {
- Demo d = new Demo();
-
- new Thread(new Input(d)).start();
- new Thread(new Output(d)).start();
- }
- }
- class Demo//取数据和改数据都在这个类中。
- {
- private String name;
- private String sex;
- private boolean flag = false;
- Object obj = new Object();
- public synchronized void set(String name,String sex)//改数据。
- {
-
- if(!flag)
- {
- this.name = name;
- this.sex = sex;
- flag = true;
- this.notify();
- }
-
- try{this.wait();}catch(Exception ex){}
- }
- public synchronized void get()//取数据。
- {
-
- if(flag)
- {
- System.out.println(name+"----"+sex);
- flag = false;
- this.notify();
- }
-
- try{this.wait();}catch(Exception ex){}
- }
- }
- class Input implements Runnable
- {
- private Demo d;
- Input(Demo d)
- {
- this.d = d;
- }
- public void run()
- {
- while (true)
- {
- d.set("zhangsan","nan");
- d.set("李四","女");
- }
- }
- }
- class Output implements Runnable
- {
- private Demo d;
- Output(Demo d)
- {
- this.d = d;
- }
- public void run()
- {
- while (true)
- {
- d.get();
- }
-
- }
- }
复制代码
|