Thread(线程间通讯,等待唤醒机制)

来源:互联网 发布:陶瓷进销存软件客服 编辑:程序博客网 时间:2024/05/12 02:13
</pre><pre name="code" class="java">package process;/* * 线程间通讯: * 其实就是多个线程在操作同一个资源 * 但是操作的动作不同。 *  * wait: * notify() * notifyAll() *  * 都使用在同步中,因为要对持有监视器(锁)的线程操作 * 所以要使用在同步中,因为只有同步才具有锁 *  * 为什么这些操作线程的方法要定义object类中呢? * 因为这些方法在操作同步中线程时,都必须要表示他们所操作线程只有的锁。 * 只有同一个锁上的被等待线程,可以被同一个notify唤醒 * 不可以对不同锁中的线程进行唤醒 *  * 也就是说,等待和唤醒必须是同一个锁 *  * 而锁可以是任意对象,所以可以被任意对象调用的方法定义object类中。 */class Res{String name;String sex;boolean flag = false;}class Input implements Runnable{private Res s;Input(Res s){this.s = s;}public void run(){int x = 0;while(true){synchronized(s){if(s.flag)try {s.wait();} catch (Exception e) {}if(x == 0){s.name = "mike";s.sex = "nan";}else{s.name="丽丽";s.sex = "女";}x = (x+1)%2;s.flag = true;s.notify();}}}}class Output implements Runnable{private Res s;Output(Res s){this.s = s;}public void run(){while(true){synchronized(s){if(!s.flag)try {s.wait();} catch (Exception e) {}System.out.println(s.name+"...."+s.sex);s.flag = false;s.notify();}}}} public class InputOutputDemo {public static void main(String[] args){Res s = new Res();Input i = new Input(s);Output o = new Output(s);Thread t = new Thread(i);Thread t1 = new Thread(o);t.start();t1.start();}}


0 0
原创粉丝点击