关于多线程 java.util.ConcurrentModificationException 问题

目标:定义一个Producer类创建Student并添加到studnts集合中,再定义一个Consumer类从studnts集合中取出数据并打印控制台。Producer,Consumer类都实现了Runnable接口。

在MainTest类的main方法中创建线程并启动,如下所示:

        Producer p = new Producer();
        Thread tp1 = new Thread(p);
        tp1.start();
        
        Consumer c = new Consumer();
        Thread tc1 = new Thread(c);
        tc1.start();

这个时候,当tc1线程要执行的时候就报java.util.ConcurrentModificationException错误,我本是对线程调用这一块儿不是太明白。请大侠们帮我解决一下儿,请告诉我问啥会出这样的问题。

 

具体类如下所示:

 

 

Student类:一个普通类,其中定义了一个name属性和一个age属性。

public class Student {
    private String name;
    private String age;
    
    public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name;
    }
    public String getAge() {
        return age;
    }
    public void setAge(String age) {
        this.age = age;
    }
    
    @Override
    public int hashCode() {
        final int prime = 31;
        int result = 1;
        result = prime * result + ((age == null) ? 0 : age.hashCode());
        result = prime * result + ((name == null) ? 0 : name.hashCode());
        return result;
    }
    @Override
    public boolean equals(Object obj) {
        if (this == obj)
            return true;
        if (obj == null)
            return false;
        if (getClass() != obj.getClass())
            return false;
        Student other = (Student) obj;
        if (age == null) {
            if (other.age != null)
                return false;
        } else if (!age.equals(other.age))
            return false;
        if (name == null) {
            if (other.name != null)
                return false;
        } else if (!name.equals(other.name))
            return false;
        return true;
    }

    
    
}

 

Classroom接口:其中定义了一个名称为studnts的List用于存放Student对象。

public interface Classroom {
    List<Student> studnts = new ArrayList<Student>();
}

 

State抽象类:其中定义了一个状态,想用这个对studnts集合的操作进行控制。

public abstract class State {
    boolean state=true;
}

 


哆啦的时光机
浏览 307回答 1
1回答
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Java