线程---2个线程通信

1.创建Cat类:

import java.io.Serializable;

public class Cat implements Serializable {
    private String name;
    private Integer age;
    private boolean flag=true;
    private boolean myw=true;

    public Cat(String name, Integer age) {
        this.name = name;
        this.age = age;
    }

    public Cat() {

    }
    @Override
    public String toString() {
        return "Cat{" +
                "name='" + name + '\'' +
                ", age=" + age +
                '}';
    }

    public void setName(String name) {
        this.name = name;
    }

    public void setAge(Integer age) {
        this.age = age;
    }

    public void setFlag(boolean flag) {
        this.flag = flag;
    }

    public String getName() {
        return name;
    }

    public Integer getAge() {
        return age;
    }

    public boolean getFlag() {
        return flag;
    }

    public boolean getMyw() {
        return myw;
    }

    public void setMyw(boolean myw) {
        this.myw = myw;
    }
}

2.创建线程1:




public class Thread1Tel extends Thread{
    private Cat cat;//通过测试类   拿到同1个锁
    public Thread1Tel(Cat cat) {
        this.cat = cat;
    }

    @Override
    public void run() {
        while (true){

            synchronized (cat){
               if(!cat.getMyw()){
                   try {
                       cat.wait();
                   } catch (InterruptedException e) {
                       e.printStackTrace();
                   }
               }

                if (cat.getFlag()){
                    cat.setName("ketty");
                    cat.setAge(7);
                    cat.setFlag(false);
                }
                else if(cat.getFlag()==false){
                    cat.setName("sussan");
                    cat.setAge(23);
                    cat.setFlag(true);
                }

                cat.setMyw(false);
                cat.notify();

            }


        }
    }
}

3.创建线程2:

public class Thread2Tel extends Thread{
    private Cat cat;//通过测试类   拿到同1个锁
    public Thread2Tel(Cat cat) {
        this.cat = cat;
    }

    @Override
    public void run() {
        while (true){

            synchronized (cat){

                if(cat.getMyw()){
                    try {
                        cat.wait();
                    } catch (InterruptedException e) {
                        e.printStackTrace();
                    }
                }


                System.out.println(cat);
                cat.setMyw(true);
                cat.notify();
            }
        }
    }
}

4.创建 测试类:

public class TelTest {
    public static void main(String[] args) {
        Cat cat = new Cat();
        new Thread1Tel(cat).start();
        new Thread2Tel(cat).start();
    }
}

5.运行结果:
在这里插入图片描述
6.总结:
线程中的通信 不能用this锁-------每个对象的this不同 相当于2个都各有各的不同的2个锁
用类锁 类锁只有1个
或者用 构造函数传过来的同1个 cat对象。

wait会释放锁资源,sleep不会;
notify 或 notifyAll 唤醒。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值