(九)Java入门--多线程(3)线程间通信实例


一、线程间通信概念

多个线程处理同一资源,但是任务不同。

二、线程间通信实例(参考代码:TreadCom1.java)

1、说明:Input和Output表示两个线程处理的两个任务,但是二者共同处理同一资源。
线程间通信实例

2、代码:TreadCom1.java

//线程之间没有通信,对于同一资源, 只是一边输入,一边输出。
class Resourse {  //公共资源
    String name;
    String sex;
}
//输入线程
class Input implements Runnable {
    Resourse r;
    int x = 0;

    Input(Resourse r)   //保证同一个对象,同一个资源
    {
        this.r = r;
    }

    public void run() {

        while (true) {
    //同步代码块消除安全隐患
    //不同的话,比如小强名字给了,但是性别还没执行的话,输出
    //就变成小强。。。输出。。。nvnvnvnvnvnv
            synchronized (r) {
            //交换输入资源
                if (x == 0) {
                    r.name = "小强";
                    r.sex = "男";
                } else {
                    r.name = "小li";
                    r.sex = "nvnvnvnvnvnv";
                }
            }
            x = (++x) % 2;
        }
    }
}
//输出线程
class Output implements Runnable {
    Resourse r;

    Output(Resourse r)   //保证同一个对象,同一个资源
    {
        this.r = r;
    }

    public void run() {
        while (true) {
            synchronized (r) {
                System.out.println(r.name + "。。。输出。。。" + r.sex);
            }
        }
    }
}

public class TreadCom1 {
    public static void main(String[] args) {
        //同一资源
        Resourse r = new Resourse();
        //不同任务
        Input i = new Input(r);
        Output o = new Output(r);
        //不同线程
        Thread t1 = new Thread(i);
        Thread t2 = new Thread(o);
        t1.start();
        t2.start();
    }
}

说明:两个线程,一个输入、一个输出,处理同一资源,但是任务不同,一个输入数据,一个输出数据,所以,就要涉及线程间通信了,但是,上面的例子,线程之间并没明显的通信,下一节的涉及到等待唤醒机制就很明显了。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值