目標(biāo):定義一個(gè)Producer類創(chuàng)建Student并添加到studnts集合中,再定義一個(gè)Consumer類從studnts集合中取出數(shù)據(jù)并打印控制臺(tái)。Producer,Consumer類都實(shí)現(xiàn)了Runnable接口。在MainTest類的main方法中創(chuàng)建線程并啟動(dòng),如下所示: Producer p = new Producer(); Thread tp1 = new Thread(p); tp1.start(); Consumer c = new Consumer(); Thread tc1 = new Thread(c); tc1.start();這個(gè)時(shí)候,當(dāng)tc1線程要執(zhí)行的時(shí)候就報(bào)java.util.ConcurrentModificationException錯(cuò)誤,我本是對線程調(diào)用這一塊兒不是太明白。請大俠們幫我解決一下兒,請告訴我問啥會(huì)出這樣的問題。 具體類如下所示: Student類:一個(gè)普通類,其中定義了一個(gè)name屬性和一個(gè)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接口:其中定義了一個(gè)名稱為studnts的List用于存放Student對象。public interface Classroom { List<Student> studnts = new ArrayList<Student>();} State抽象類:其中定義了一個(gè)狀態(tài),想用這個(gè)對studnts集合的操作進(jìn)行控制。public abstract class State { boolean state=true;}
關(guān)于多線程 java.util.ConcurrentModificationException 問題
哆啦的時(shí)光機(jī)
2019-03-21 18:15:08