public class ThreadCommunication {
/**
* 三个线程a、b、c并发运行,b,c需要a线程的数据怎么实现
*
* 根据问题的描述,通过三个线程,ThreadA ThreadB ThreadC
* ThreadA用于初始化数据num,只有num初始化完成之后再让ThreadB和ThreadC获取到初始化的变量num。
*
*
* 分析过程如下:
* 考虑到线程的不确定性,因此我们不能确保ThreadA就一定先于ThreadB和ThreadC前执行,就算
* ThreadA先执行了,我们也无法保证ThreadA什么时候才能将变量num初始化完成。因此我们必须让
* ThreadB和ThreadC去等待ThreadA完成任务后发出的消息
*
* 解决两个问题:
* 1:让ThreadB和ThreadC先执行完
* 2:ThreadA执行完之后给ThreadB和ThreadC发送消息
*/
/**
* 两种解决方案
* 1、使用纯Java API的Semaphore类来控制线程的等待和释放
* 2、使用Android提供的消息机制
*/
//定义一个变量作为数据
private static int num;
public static void main(String[] args) {
Thread threadA = new Thread(new Runnable() {
@Override
public void run() {
try {
//模拟耗时操作之后初始化变量num
Thread.sleep(1000);
num=1;
} catch (InterruptedException e) {
e.printStackTrace();
}
}
});
Thread threadB = new Thread(new Runnable() {
@Override
public void run() {
System.out.println(Thread.currentThread().getName()+"获取到num的值为:"+num);
}
});
Thread threadC = new Thread(new Runnable() {
@Override
public void run() {
System.out.println(Thread.currentThread().getName()+"获取到num的值为:"+num);
}
});
//同时开启三个线程
threadA.start();
threadB.start();
threadC.start();
}
}
public class ThreadCommunication {
/**