ในขณะที่คุณต้องจำไว้ว่าความปลอดภัยของเธรดจะต้องคำนึงถึงรหัสรอบข้างด้วยเช่นกันดูเหมือนว่าคุณจะโชคดี ความจริงที่ว่าMatchersถูกสร้างขึ้นโดยใช้วิธีการจับคู่ของ Pattern และไม่มีตัวสร้างสาธารณะเป็นสัญญาณเชิงบวก ในทำนองเดียวกันคุณใช้รวบรวมวิธีการแบบคงที่จะสร้างครอบคลุมรูปแบบ
ดังนั้นในระยะสั้นหากคุณทำบางสิ่งดังตัวอย่าง:
Pattern p = Pattern.compile("a*b");
Matcher m = p.matcher("aaaaab");
boolean b = m.matches();
คุณน่าจะทำได้ดี
ติดตามตัวอย่างโค้ดเพื่อความชัดเจน: โปรดทราบว่าตัวอย่างนี้มีนัยอย่างยิ่งว่า Matcher ที่สร้างขึ้นนั้นเป็นเธรดโลคัลที่มี Pattern และการทดสอบ กล่าวคือคุณไม่ควรเปิดเผย Matcher ที่สร้างขึ้นด้วยเหตุนี้กับเธรดอื่น ๆ
ตรงไปตรงมานั่นคือความเสี่ยงของคำถามเกี่ยวกับความปลอดภัยของเธรด ความจริงก็คือรหัสใด ๆสามารถทำให้เธรดไม่ปลอดภัยได้หากคุณพยายามอย่างเต็มที่ โชคดีที่มีหนังสือที่ยอดเยี่ยม ที่สอนวิธีต่างๆมากมายที่เราสามารถทำลายรหัสของเราได้ หากเราอยู่ห่างจากข้อผิดพลาดเหล่านั้นเราจะลดความน่าจะเป็นของปัญหาการทำเธรดได้อย่างมาก
compile()
วิธีนี้อาจไม่เป็นเช่นนั้น ในช่วงหลายปีที่ผ่านมามีข้อบกพร่องสองหรือสามจุดที่ทำให้การคอมไพล์ล้มเหลวในสภาพแวดล้อมแบบมัลติเธรด ฉันอยากจะแนะนำให้ทำการคอมไพล์ในบล็อกที่ซิงโครไนซ์