您的位置:首页 > 编程语言 > Java开发

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

2018-02-19 12:21 786 查看

一、线程间通信概念

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

二、线程间通信实例(参考代码: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();
}
}


说明:两个线程,一个输入、一个输出,处理同一资源,但是任务不同,一个输入数据,一个输出数据,所以,就要涉及线程间通信了,但是,上面的例子,线程之间并没明显的通信,下一节的涉及到等待唤醒机制就很明显了。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  多线程