加一个同步可以解决问题,附上代码,我是一个纯新手,有不对的地方望各位大神指正,不胜感激
import java.util.List;
import java.util.ArrayList;
class MyList
{
boolean flag = false;
private List list = new ArrayList();
public void add()
{
list.add('q');
}
public int size()
{
return list.size();
}
}
class ThreadA extends Thread
{
private MyList myList;
public ThreadA(MyList myList)
{
this.myList = myList;
}
@Override
public void run()
{
for(int i = 0;i<10;i++)
{
synchronized(myList){
if(myList.flag)
try{myList.wait();} catch(InterruptedException e){}
myList.add();
System.out.println("添加了"+(i+1)+"个元素");
myList.flag = true;
myList.notify();
}
}
}
}
class ThreadB extends Thread
{
private MyList myList;
public ThreadB(MyList myList)
{
this.myList = myList;
}
@Override
public void run()
{
synchronized(myList)
{
try {
System.out.println("b run");
while (true)
{
if(!myList.flag)
try{myList.wait();} catch(InterruptedException e){}
if(myList.size() == 5)
{
System.out.println("线程b要退出了");
throw new InterruptedException();
}
myList.flag = false;
myList.notify();
}
}
catch (InterruptedException e)
{
e.printStackTrace();
}
}
}
}
public class Test
{
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();
}
}