Meskipun Anda perlu mengingat bahwa keamanan utas juga harus mempertimbangkan kode di sekitarnya, Anda tampaknya beruntung. Fakta bahwa Pencocokan dibuat menggunakan metode pabrik pencocokkan Pola dan kurangnya konstruktor publik adalah tanda positif. Demikian juga, Anda menggunakan metode statis kompilasi untuk membuat Pola yang mencakup .
Jadi, singkatnya, jika Anda melakukan sesuatu seperti contoh:
Pattern p = Pattern.compile("a*b");
Matcher m = p.matcher("aaaaab");
boolean b = m.matches();
kamu harus melakukannya dengan cukup baik.
Tindak lanjut dari contoh kode untuk kejelasan: perhatikan bahwa contoh ini sangat menyiratkan bahwa Matcher yang dibuat adalah thread-local dengan Pola dan pengujian. Yaitu, Anda tidak boleh mengekspos Matcher yang dibuat ke utas lainnya.
Terus terang, itulah risiko dari pertanyaan keamanan utas apa pun. Kenyataannya adalah bahwa kode apa pun dapat dibuat thread-unsafe jika Anda berusaha cukup keras. Untungnya, ada buku bagus yang mengajari kita banyak cara untuk merusak kode kita. Jika kita menjauh dari kesalahan itu, kita sangat mengurangi kemungkinan masalah threading kita sendiri.
compile()metodenya mungkin tidak. Ada dua atau tiga bug selama bertahun-tahun yang menyebabkan kompilasi gagal di lingkungan multithread. Saya akan merekomendasikan melakukan kompilasi dalam blok tersinkronisasi.