Seperti yang kita semua tahu, vektor dan hashtable aman di Java. Oleh karena itu, tidak akan ada masalah dalam pengoperasian vektor dan hashtable. Tetapi ada situasi: ketika menyalin hashtable ke hashtable lain, jika bunga dari metode putall digunakan, java.util.currentModificationException akan dilemparkan. Pertama unggah kode:
Testsync.java
Salinan kode adalah sebagai berikut:
testsync kelas publik
{
/**
* Utama (saya menggunakan satu kalimat untuk menggambarkan fungsi metode ini)
* (Ketentuan yang berlaku untuk metode ini dijelaskan di sini)
* @param args
* @return batal
* @pengecualian
* @Since 1.0.0
*/
public static void main (string [] args)
{
Peta <integer, user> list = hashtable baru <integer, user> ();
Daftar <User> vec = vektor baru <User> ();
Testthread thread = testThread baru ();
thread.start ();
int i = 0;
sementara (i <1000)
{
i ++;
System.out.println ("iiiiiiiiiii = -------------------" + i);
list.clear ();
vec.clear ();
// Vektor dan hashtable aman-utas, dan implementasi dua set dalam metode putall berbeda
vec.addall (constans.uservec);
// disinkronkan (constans.userlist)
// {
list.putAll (constans.userlist);
//}
System.out.println ("---------" + list.size ());
System.out.println ("---------" + vec.size ());
}
System.out.println ("Over ------------------------------------------ --- ");
}
}
Kelas Constans
{
peta statis publik <integer, user> userlist = hashtable baru <integer, user> ();
Daftar Statis Publik <User> userVec = vektor baru <User> ();
}
kelas testthread memperluas utas
{
@Mengesampingkan
public void run ()
{
untuk (int i = 0; i <100000; i ++)
{
Pengguna pengguna = pengguna baru ();
user.setid (i);
user.setname ("name" + i);
if (! constans.userlist.containskey (i))
{
Constans.userlist.put (i, pengguna);
Constans.uservec.add (pengguna);
}
}
System.out.println ("Thread End ----------------------------------------- -------------------------------------------------- -----------------------
}
}
Kapan kita mau
Salinan kode adalah sebagai berikut:
// disinkronkan (constans.userlist)
// {
list.putAll (constans.userlist);
//}
Ketika sinkronisasi tidak digunakan, pengecualian dilemparkan ke belakang. Itu karena Constans.Userlist tidak disinkronkan, bukan metode Putall tidak aman.
Perbedaan antara vektor dan hashtable adalah bahwa metode addall vektor dapat berjalan secara normal tanpa sinkronisasi.
User.java
Salinan kode adalah sebagai berikut:
pengguna kelas publik
{
Private Int ID;
nama string pribadi;
int getid publik ()
{
Return ID;
}
setid public void (int id)
{
this.id = id;
}
getName string publik ()
{
nama pengembalian;
}
public void setName (nama string)
{
this.name = name;
}
}
Saya tidak menulis dengan baik, semua orang memaafkan saya.