多线程(7)

本文介绍了如何通过Java多线程解决资源分配问题,确保线程安全。首先,通过实例展示了如何运行程序并解决程序中出现的随机问题。接着,实现了正确间隔输出姓名和性别的数据,利用wait()、notify()和notifyAll()方法确保线程间的通信。随后,对代码进行了重构,使用JDK1.5的Lock和Condition接口来替代传统的同步机制,提高了代码的灵活性和可读性。
摘要由CSDN通过智能技术生成

需求:
资源有姓名和性别。
两个线程,
一个负责给姓名和性别赋值,
一个负责获取姓名和性别的值。

class Resource
{
   
    String name;
    String sex;
}
//赋值线程任务
class Input implements Runnable
{
   
    private Resource r;
    Input(Resource r)
    {
        this.r = r;
    }
    public void run()
    {
        int x = 0;
        while(true)
        {
            if(x==0)
            {
                r.name = "张飞";
                r.sex = "男";
            }
            else
            {
                r.name = "rose";
                r.sex = "女女女女";
            }
            x = (x+1)%2;
        }
    }
}
//获取值线程任务
class Output implements Runnable
{
   
    private Resource r ;
    Output(Resource r)
    {
        this.r = r;
    }
    public void run()
    {
        while(true)
        {
            System.out.println(r.name+"....."+r.sex);
        }
    }
}

class ThreadTest2
{
   
    public static void main(String[] args)
    {
        Resource r = new Resource();
        Input in = new Input(r);
        Output out = new Output(r);
        Thread t1 = new Thread(in);
        Thread t2 = new Thread(out);
        t1.start();
        t2.start();

    }
}

运行一下,解决程序的 “妖”的问题

分析过程:
加入同步,必须保证同一个锁,解决妖的问题。
//描述资源。
class Resource
{
   
    String name;
    String sex;
}
//赋值线程任务
class Input implements Runnable
{
   
    private Resource r;
//  private Object obj = new Object();
    Input(Resource r)//任务一初始化就必须有要处理的资源。
    {
        this.r = r;
    }
    public void run()
    {
        int x &
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值