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

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:30
name:李四 age:40
name:张三 age:30
name:李四 age:40
name:张三 age:30
name:李四 age:40
name:张三 age:30
name:李四 age:40
name:张三 age:30
name:李四 age:40
name:张三 age:30
name:李四 age:40
name:张三 age:30
name:李四 age:40
name:张三 age:30
name:李四 age:40
name:张三 age:30
name:李四 age:40
name:张三 age:30
name:李四 age:40
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值