java多线程例子(生成者和消费者)

来源:互联网 发布:网络外汇理财诈骗信号 编辑:程序博客网 时间:2024/05/21 00:46

Info.cs 商品

复制代码
public class Info {    boolean flag=false;    private String name="张三";    private int age=30;        public synchronized void set(String name,int age)    {        try        {            if(!flag)                            super.wait();                    }        catch(InterruptedException ex)        {            System.out.println(ex.getStackTrace());        }                try        {                    this.name=name;            Thread.sleep(100);            this.age=age;        }        catch(InterruptedException ex)        {            System.out.println(ex.getStackTrace());        }        flag=false;        super.notify(); //唤醒调用了wait的方法线程    }    public synchronized void get()    {        try        {            if(flag)                super.wait();        }        catch (InterruptedException ex)        {            System.out.println(ex.getStackTrace());        }        try        {            Thread.sleep(100);            System.out.println("name:"+name+" age:"+age);        }        catch(InterruptedException ex)        {            System.out.println(ex.getStackTrace());        }        flag=true;        super.notify();    }}
复制代码

Producter.cs 生产者类

复制代码
public class Producter implements Runnable{    Info info=null;    boolean flag=false;    final int count=20;    public Producter(Info info)    {        this.info=info;    }    public void run()    {        for(int i=0;i<count;i++)        {                        if(flag)            {                this.info.set("张三",30);                                flag=false;            }            else             {                this.info.set("李四",40);                flag=true;            }                            }    }}
复制代码

Customer.cs 消费者类

复制代码
public class Customer implements Runnable{    Info info;    final int count=20;    public Customer(Info info)    {        this.info=info;    }    public void run()    {        for(int i=0;i<count;i++)        {            info.get();        }    }}
复制代码

TestThread.cs 主类

复制代码
public class TeshThread {    public static void main(String[] args) {        // TODO Auto-generated method stub        Info info=new Info();        Producter p=new Producter(info);        Customer c=new Customer(info);        new Thread(p).start();        new Thread(c).start();    }}
复制代码

运行结果:

复制代码
name:张三 age:30name:李四 age:40name:张三 age:30name:李四 age:40name:张三 age:30name:李四 age:40name:张三 age:30name:李四 age:40name:张三 age:30name:李四 age:40name:张三 age:30name:李四 age:40name:张三 age:30name:李四 age:40name:张三 age:30name:李四 age:40name:张三 age:30name:李四 age:40name:张三 age:30name:李四 age:40
0 0