关于多线程通信---共享变量

念念不忘233 2017-10-29 07:38:55
具体问题在代码注释中
源码来自《Java多线程编程核心技术》 第三章开篇
求问哇~~~非常感谢~~~


public class MyList {
private List list=new ArrayList();
public void add(){
list.add("nice" );
}
public int size(){
return list.size();
}
}



public class ThreadA extends Thread {
private MyList list;
public ThreadA(MyList list) {
super();
this.list = list;
}
@Override
public void run() {

try{
for(int i=0;i<10;i++){
list.add();
System.out.println("add "+(i+1));
Thread.sleep(1000);
}
}catch(InterruptedException e){
e.printStackTrace();
}
}
}


public class ThreadB extends Thread {
private MyList list;
public ThreadB(MyList list) {
super();
this.list = list;
}
@Override
public void run() {
try{
while(true){
/**
* 按书本上源码,不能正确的运行
* 但while语句中加一句输出能正确输出或者说正确抛出异常,书本上源码是没有的
* 求问,为什么
* jdk1.8
* myeclipse 2016
*/
if(list.size()==5){
System.out.println("5,threadB out....");
throw new InterruptedException();
}
}
}catch(InterruptedException e){
e.printStackTrace();
}
}
}


public class Run {
public static void main(String[] args) {
MyList list=new MyList();
ThreadA a=new ThreadA(list);
a.setName("A");
a.start();

ThreadB b=new ThreadB(list);
b.setName("B");
b.start();
}
}
...全文
235 2 打赏 收藏 转发到动态 举报
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
u010222066 2017-10-30
  • 打赏
  • 举报
回复
看了一下你的代码,感觉没有问题。不过对共享变量list没有加同步,不一定会抛出InterruptedException的异常。
dgqjava 2017-10-30
  • 打赏
  • 举报
回复
输出语句中有同步操作, 有可能会对可见性产生影响

62,623

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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