进程同步-生产者消费者问题

来源:互联网 发布:研究生软件著作权 编辑:程序博客网 时间:2024/05/17 06:52

Info1.java

=================

package threads;



class Info1 {

    

    public String getName() {

        return name;

    }

 

    public void setName(String name) {

        this.name = name;

    }

 

    public int getAge() {

        return age;

    }

 

    public void setAge(int age) {

        this.age = age;

    }

 

    public synchronized void set(String name,int age){

        if(!flag){

            try{

                super.wait();

            }catch (Exception e) {

                e.printStackTrace();

            }

        }

        this.name=name;

        try{

            Thread.sleep(1000);

        }catch (Exception e) {

            e.printStackTrace();

        }

        this.age=age;

        flag=false;

        super.notify();

    }

     

    public synchronized void get(){

        if(flag){

            try{

                super.wait();

            }catch (Exception e) {

                e.printStackTrace();

            }

        }

         

        try{

            Thread.sleep(100);

        }catch (Exception e) {

            e.printStackTrace();

        }

        System.out.println(this.getName()+"<===>"+this.getAge());

        flag=true;

        super.notify();

    }

    private String name ="Rollen";

    private int age =20;

    private boolean flag=false;

}


ProducerInfo1.java

===================

package threads;



class ProducerInfo1 implements Runnable {

    private Info1 info =null;

 

    ProducerInfo1(Info1 info) {

        this.info = info;

    }

 

    public void run() {

        boolean flag =false;

        for (int i =0; i <25; ++i) {

            if (flag) {

                 

                this.info.set("Rollen",20);

                flag = false;

            } else {

                this.info.set("ChunGe",100);

                flag = true;

            }

        }

    }



}

ConsumerInfo1.java

======================

package threads;



class ConsumerInfo1 implements Runnable {

    private Info1 info =null;

 

    public ConsumerInfo1(Info1 info) {

        this.info = info;

    }

 

    public void run() {

        for (int i =0; i <25; ++i) {

            try {

                Thread.sleep(100);

            } catch (Exception e) {

                e.printStackTrace();

            }

            this.info.get();

        }

    }

}

TestInfo1.java

=========================

package threads;



public class TestInfo1 {

  public static void main(String[] args) {

       Info1 info=new Info1();

       ProducerInfo1 pro=new ProducerInfo1(info);

       ConsumerInfo1 con=new ConsumerInfo1(info);

       new Thread(pro).start();

       new Thread(con).start();

   }



}

运行结果:

=========================

Rollen<===>20

ChunGe<===>100

Rollen<===>20

ChunGe<===>100

Rollen<===>20

ChunGe<===>100

Rollen<===>20

ChunGe<===>100

Rollen<===>20

ChunGe<===>100

Rollen<===>20

ChunGe<===>100

Rollen<===>20

ChunGe<===>100

Rollen<===>20

ChunGe<===>100

Rollen<===>20

ChunGe<===>100

Rollen<===>20

ChunGe<===>100

Rollen<===>20

ChunGe<===>100

Rollen<===>20

ChunGe<===>100

Rollen<===>20