关于Java线程方面的问题???????????????
曦紫沐 2019-03-21 03:42:47 import java.util.ArrayList;
/**
* 创建一个线程,睡眠随机秒数(200毫秒以内)后生成一个随机整数(100以内)添加到集合中,
* 集合中添加满10个数后,睡眠10秒,然后在打印该集合元素
* 在主线程main中,使用interrupt()打断该线程,使之能尽快的打印集合中的十个元素
*/
public class TestCollection {
public static void main(String[] args) {
AddArrayList addArrayList = new AddArrayList();
addArrayList.start();
while (true) {
//如果flag为true,说明还没有添加完
if (addArrayList.getFlag()) {
System.out.print("");//******问题是这一句打印空的语句,如果加上这一句,代码可以正常打印并退出,如果注释掉这一句的话
//*****则会经过10秒后打印集合,但无法退出,一直循环。请问是为什么?????????????
//PS:不要使用断点
continue;
} else {
System.out.println(addArrayList.getFlag() + " main");
addArrayList.interrupt();
break;
}
}
}
}
class AddArrayList extends Thread {
private ArrayList<Integer> arrayList = new ArrayList<>();
private int randomNum;//生成的随机数
private boolean flag = true;//设置标记,若为true,则集合元素未添加完
public boolean getFlag() {
return flag;
}
public void setFlag(boolean flag) {
this.flag = flag;
}
@Override
public void run() {
for (int i = 0; i < 10; i++) {
try {
Thread.sleep((int) (Math.random() * 201));
} catch (InterruptedException e) {
e.printStackTrace();
}
randomNum = (int) (Math.random() * 101);
System.out.println(randomNum);
arrayList.add(randomNum);
}
//集合元素添加完毕,将flag设置为false
setFlag(false);
try {
Thread.sleep(10000);
} catch (InterruptedException e) {
//e.printStackTrace();
System.out.println("被打断");
}
System.out.println(arrayList);
}
}