【线程通信】
最粗暴的“文件共享”通信
通过文件共享
package com.fly.threadDome;
import java.nio.file.Files;
import java.nio.file.Paths;
/**
* @Title: 线程通信
* @Author: Fly
* @Date: 2020/8/30 - 13:50
* @Description:
*/
public class ThreadDome {
public static void main(String[] args) {
//线程1:写入数据
new Thread(()->{
try{
while (true){
Files.write(Paths.get("E:\\TestFile.txt"),
("当前时间"+String.valueOf(System.currentTimeMillis())).getBytes());
Thread.sleep(1000L);
}
}catch (Exception e){
e.printStackTrace();
}
}).start();
//线程2:读取数据
new Thread(()->{
try{
while (true){
Thread.sleep(1000l);
byte[] allBytes =Files.readAllBytes(Paths.get("E:\\TestFile.txt"));
System.out.println(new String(allBytes));
}
}catch (Exception e){
e.printStackTrace();
}
}).start();
}
}
文件TestFile.txt记录最后一次时间
控制台while(true)每一次读取最新文件的内容
变量共享
利用内存的变量区域
public static String content="空";
private static void variableThread() {
//线程1:写入数据
new Thread(()->{
try{
while (true){
content=("当前时间:"+String.valueOf(System.currentTimeMillis()));
Thread.sleep(1000L);
}
}catch (Exception e){
e.printStackTrace();
}
}).start();
//线程2:读取数据
new Thread(()->{
try{
while (true){
Thread.sleep(1000l);
System.out.println(content);
}
}catch (Exception e){
e.printStackTrace();
}
}).start();
}
线程协作-JDK API
老生常谈的话题,就不在这里贴代码了
- JDK中对于需要多线程协作完成某一任务的场景,提供了对应API支持
- 多线程协作的典型场景是:生产者-消费者模型。(线程阻塞、线程唤醒)
- 示例:线程A去买包子,没有包子,则不再执行。线程B生产出包子,通知线程A继续执行