อย่างที่เราทุกคนรู้ว่าเวกเตอร์และแฮชช์เป็นเรื่องที่ปลอดภัยใน Java ดังนั้นจะไม่มีปัญหาในการดำเนินงานของเวกเตอร์และแฮช แต่มีสถานการณ์: เมื่อคัดลอกแฮชช์ไปยังแฮชแต้มอื่น ๆ หากมีการใช้ดอกไม้ของวิธี Putall, java.util.concurrentModificationException จะถูกโยนทิ้ง อัปโหลดรหัสก่อนอื่น:
testsync.java
การคัดลอกรหัสมีดังนี้:
Testsync ชั้นเรียนสาธารณะ
-
-
* หลัก (ฉันใช้หนึ่งประโยคเพื่ออธิบายฟังก์ชั่นของวิธีนี้)
* (เงื่อนไขที่เกี่ยวข้องสำหรับวิธีนี้อธิบายไว้ที่นี่)
* @param args
* @return เป็นโมฆะ
* @Exception
* @Since 1.0.0
-
โมฆะคงที่สาธารณะหลัก (สตริง [] args)
-
แผนที่ <จำนวนเต็ม, ผู้ใช้> list = hashtable ใหม่ <จำนวนเต็ม, ผู้ใช้> ();
รายการ <user> vec = เวกเตอร์ใหม่ <user> ();
testHread Thread = new TestThread ();
thread.start ();
int i = 0;
ในขณะที่ (i <1,000)
-
i ++;
System.out.println ("iiiiiiiiiiii = -------------------" + i);
list.clear ();
Vec.Clear ();
// vector และ hashtable เป็นเธรดที่ปลอดภัยและการใช้งานของทั้งสองชุดในวิธี Putall นั้นแตกต่างกัน
vec.addall (constans.uservec);
// ซิงโครไนซ์ (constans.userlist)
-
list.putall (constans.userlist);
-
System.out.println ("---------" + list.size ());
System.out.println ("---------" + vec.size ());
-
System.out.println ("Over ------------------------------------------------------------------ --- ");
-
-
คอนสแตน
-
แผนที่สาธารณะคงที่ <จำนวนเต็ม, ผู้ใช้> userlist = ใหม่ hashtable <จำนวนเต็ม, ผู้ใช้> ();
รายการคงที่สาธารณะ <user> uservec = เวกเตอร์ใหม่ <user> ();
-
การทดสอบระดับชั้นเรียนขยายเธรด
-
@Override
การเรียกใช้โมฆะสาธารณะ ()
-
สำหรับ (int i = 0; i <100000; i ++)
-
ผู้ใช้ผู้ใช้ = ผู้ใช้ใหม่ ();
user.setId (i);
user.setName ("ชื่อ" + i);
if (! constans.userlist.containskey (i))
-
constans.userlist.put (i, ผู้ใช้);
constans.uservec.add (ผู้ใช้);
-
-
System.out.println ("End End ------------------------------------- ------------------------------------------------------ -----------------------
-
-
เมื่อเราจะ
การคัดลอกรหัสมีดังนี้:
// ซิงโครไนซ์ (constans.userlist)
-
list.putall (constans.userlist);
-
เมื่อไม่ได้ใช้การซิงโครไนซ์ข้อยกเว้นจะถูกโยนกลับ เป็นเพราะ constans.userlist ไม่ได้ซิงโครไนซ์แทนที่จะใช้วิธี putall ไม่ปลอดภัย
ความแตกต่างระหว่างเวกเตอร์และแฮชช์คือวิธี Addall ของเวกเตอร์สามารถทำงานได้ตามปกติโดยไม่ต้องซิงโครไนซ์
user.java
การคัดลอกรหัสมีดังนี้:
ผู้ใช้ระดับสาธารณะ
-
ID int ส่วนตัว;
ชื่อสตริงส่วนตัว;
สาธารณะ int getid ()
-
return id;
-
โมฆะสาธารณะ setId (ID int)
-
this.id = id;
-
สตริงสาธารณะ getName ()
-
ชื่อคืน;
-
โมฆะสาธารณะ setName (ชื่อสตริง)
-
this.name = ชื่อ;
-
-
ฉันเขียนไม่ดีทุกคนยกโทษให้ฉัน