关于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);
}
}
...全文
64 回复 打赏 收藏 转发到动态 举报
写回复
用AI写文章
回复
切换为时间正序
请发表友善的回复…
发表回复

51,412

社区成员

发帖
与我相关
我的任务
社区描述
Java相关技术讨论
javaspring bootspring cloud 技术论坛(原bbs)
社区管理员
  • Java相关社区
  • 小虚竹
  • 谙忆
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧