>

메인 클래스를 실행할 때 예외가 발생합니다 : 스레드 예외

실행 방법을 사용하며 다음과 같습니다.

   @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++;
}

그리고 나의 주 :

   Course c = new Course();
    for(int i = 0 ; i<200;i++)
    {
        Thread t = new Thread(c);
        t.start();
    }
    c.toString();

Tihs 예외는 무엇입니까?

감사합니다!


  • 답변 # 1

    다른 스레드를 사용하여 동시에 ArrayList에 항목을 추가하려고합니다. 동시 데이터 구조를 사용해야합니다 (또는 다른 목록을 사용하면 서로 병합합니다).

    동시 목록에 대한 자세한 내용은 여기에서 찾을 수 있습니다. Java JDK에 동시 목록이 있습니까?

  • 답변 # 2

    공통 구현 ArrayList 에 항목을 추가하려고합니다.  또는 List  스레드 안전하지 않으며 ConcurrentModificationException 를 유발합니다.  최적화되지 않은 구조를 수정 (추가/삭제) 할 때 발생합니다.

    Collections.synchronizedList 를 사용하는 것이 좋습니다  포장지 :

    와이즈 비즈

    Returns a synchronized (thread-safe) list backed by the specified list. In order to guarantee serial access, it is critical that all access to the backing list is accomplished through the returned list.

    List<Course> arrCourse = Collections.synchronizedList(new ArrayList<>());

  • 이전 java - 애플릿에서 JFrame으로 전환하려고
  • 다음 Arduino - 아두 이노 - 버튼을 눌렀을 때 타이머를 시작하려면