新手写题目的时候遇到了一个不明白的地方,具体问题如下
在这里插入代码片package Lesson20210617;
import java.util.LinkedList;
import java.util.Scanner;
/**
* 新建一个线程类WriterThread,
* 作用是可以不断把键盘输入的值存入到一个LinkedList集合中
* 当输入内容是exit时,退出当前线程
*
* 新建一个线程类ReaderThread,
* 作用是可以不断的把LinkedList的内容进行读取每隔2秒输出到控制台
* 当集合内容为空时,休眠5秒,继续读取,如还是内容为空,则继续
* 休眠,直到读取到exit时退出当前线程
*
* 测试类,
* 提供一个LinkedList 作为写线程与读线程的内容存储中间介。
*/
public class Exercise03 {
public static void main(String[] args) {
method01();
}
public static void method01() {
LinkedList<String> link = new LinkedList<>();
try {
WriterThread wt = new WriterThread(link);
wt.start();
ReaderThread rt = new ReaderThread(link);
rt.start();
}catch (Exception e){
e.printStackTrace();
}
}
}
/**
* 写线程
*/
class WriterThread extends Thread{
private Scanner scan = new Scanner(System.in);
private LinkedList<String> link;
public WriterThread(LinkedList<String> link){
this.link = link;
}
public WriterThread() {
}
@Override
public void run() {
while (true) {
//for (int i=1;i<10;i++){
System.out.print("请输入内容:");
String in = scan.next();
link.addLast(in);
if ("exit".equals(in)) {
break;
}
}
}
}
/**
*读线程
*/
class ReaderThread extends Thread{
private LinkedList<String> link;
public ReaderThread(LinkedList<String> link){
this.link = link;
}
@Override
public void run() {
try {
while (true) {
if (link.size() == 0) {
sleep(5 * 1000);
}else {
String s = link.removeFirst();
if ("exit".equals(s)) {
break;
}
System.err.println("读取到:" + s);
sleep(1 * 1000);
}
}
}catch (Exception e){
e.printStackTrace();
}
}
}
不理解的地方在于,写入线程的集合,是怎么给到读线程的,不然读线程没有数据,说是设置一个中间存储介质,我也没看到写入线程里面的集合放入中间的存储介质LinkedList,百思不得其解。这其中有什么我理解错或者没有理解的的地方吗,求解!