Java学习之路0806<复习>(线程wait 、notify)

来源:互联网 发布:sql删除一个字段的数据 编辑:程序博客网 时间:2024/04/30 21:48
public class MyRunnable1 implements Runnable{    String Lock1="abc";    String Lock2="def";    @Override    public void run() {        // TODO Auto-generated method stub        System.out.println("1开始启动");        synchronized (Lock1) {//          try {//              Thread.sleep(1000);//          } catch (InterruptedException e) {//              // TODO Auto-generated catch block//              e.printStackTrace();//          }            System.out.println("释放Lock1,等待Lock2");            try {                Lock1.wait();            } catch (InterruptedException e) {                // TODO Auto-generated catch block                e.printStackTrace();            }            System.out.println("等待Lock2");            synchronized (Lock2) {                System.out.println("等到了Lock2,1完成");            }        }    }}
public class MyRunnable2 implements Runnable{    String Lock1="abc";    String Lock2="def";    @Override    public void run() {        // TODO Auto-generated method stub        System.out.println("2开始启动");        synchronized (Lock2) {//          try {//              Thread.sleep(1000);//          } catch (InterruptedException e) {//              // TODO Auto-generated catch block//              e.printStackTrace();//          }            System.out.println("等待Lock1");            synchronized (Lock1) {                System.out.println("2完成");                System.out.println("唤醒lock1");                Lock1.notify();            }        }    }}
public class RunnableTest {    public static void main(String[] args) {        MyRunnable1 r1=new MyRunnable1();        MyRunnable2 r2=new MyRunnable2();        Thread t1=new Thread(r1);        Thread t2=new Thread(r2);        t1.start();//      try {//          Thread.sleep(3000);//      } catch (InterruptedException e) {//          // TODO Auto-generated catch block//          e.printStackTrace();//      }        t2.start();    }}

运行结果:
1开始启动
释放Lock1,等待Lock2
2开始启动
等待Lock1
2完成
唤醒lock1
等待Lock2
等到了Lock2,1完成

生产者与消费者

public class Product {    private int num;    public int getNum() {        return num;    }    public void setNum(int num) {        this.num = num;    }}
public class Consumer implements Runnable{    private Product pro;    public Consumer(Product pro) {        this.pro=pro;    }    @Override    public void run() {        // TODO Auto-generated method stub        while (true) {            synchronized (pro) {                System.out.println("消费者到仓库");                if (pro.getNum()!=0) {                    System.out.println("消费了一件产品");                    pro.setNum(0);                }                try {                    Thread.sleep(1000);                } catch (InterruptedException e) {                    // TODO Auto-generated catch block                    e.printStackTrace();                }                try {                    pro.wait();                } catch (InterruptedException e) {                    // TODO Auto-generated catch block                    e.printStackTrace();                }            }        }    }}
public class Producer implements Runnable{    private Product pro;    public Producer(Product pro) {        this.pro=pro;    }    @Override    public void run() {        // TODO Auto-generated method stub        while (true) {            try {                Thread.sleep(500);            } catch (InterruptedException e1) {                // TODO Auto-generated catch block                e1.printStackTrace();            }            synchronized (pro) {                System.out.println("生产者生产");                if (pro.getNum()==0) {                    System.out.println("生产一件产品");                    pro.setNum(1);                }                try {                    Thread.sleep(1000);                } catch (InterruptedException e) {                    // TODO Auto-generated catch block                    e.printStackTrace();                }                pro.notify();            }        }    }}
public class ProductTest {    public static void main(String[] args) {        Product pro=new Product();        Producer producer=new Producer(pro);        Consumer consumer=new Consumer(pro);        Thread t1=new Thread(producer);        Thread t2=new Thread(consumer);        t1.start();        try {            Thread.sleep(1000);        } catch (InterruptedException e) {            // TODO Auto-generated catch block            e.printStackTrace();        }        t2.start();    }}

运行结果:
生产者生产
生产一件产品
消费者到仓库
消费了一件产品
生产者生产
生产一件产品
消费者到仓库
消费了一件产品
生产者生产
生产一件产品
消费者到仓库
消费了一件产品
生产者生产
生产一件产品
消费者到仓库
消费了一件产品
生产者生产
生产一件产品
消费者到仓库
消费了一件产品

0 0
原创粉丝点击