运行主类时出现异常:exception on Thread's
i使用run方法,它看起来像这样:
@Override
public synchronized void run() {
// TODO Auto-generated method stub
int randomNum = ThreadLocalRandom.current().nextInt(1, 4);
Student studentThread = new Student();
Inlay inlayThread = new Inlay();
studentThread.setId(counter);
inlayThread.setInlayId(randomNum);
Course courseThread = new Course();
courseThread.setInlayD(inlayThread);
courseThread.setStudentD(studentThread);
this.arrCourse.add(courseThread);
System.out.println(courseThread.toString());
counter++;
}
和我的Main:
Course c = new Course();
for(int i = 0 ; i<200;i++)
{
Thread t = new Thread(c);
t.start();
}
c.toString();
这是什么例外?
谢谢!
答案 0 :(得分:0)
您正在尝试使用不同的线程同时将项目添加到ArrayList中。您将必须使用并发数据结构(或使用不同的列表,它们将它们合并在一起)。
您可以在此处找到有关并发列表的更多信息:Is there a concurrent List in Java's JDK?
答案 1 :(得分:0)
您尝试将项目添加到(我认为)不是线程安全的常见实现ArrayList
或List
,导致修改后抛出ConcurrentModificationException
(添加/删除) )未经过优化的结构。
我建议使用Collections.synchronizedList
包装器:
返回由指定列表支持的同步(线程安全)列表。为了保证串行访问,至关重要的是,对后备列表的所有访问都必须通过返回的列表来完成。
List<Course> arrCourse = Collections.synchronizedList(new ArrayList<>());