Mặc dù bạn cần phải nhớ rằng an toàn luồng cũng phải tính đến mã xung quanh, bạn dường như đang gặp may. Thực tế là Matchers được tạo bằng phương pháp nhà máy của matcher và thiếu nhà thầu công khai là một dấu hiệu tích cực. Tương tự, bạn sử dụng phương thức tĩnh compile để tạo bao gồm Pattern.
Vì vậy, trong ngắn hạn, nếu bạn làm điều gì đó như ví dụ:
Pattern p = Pattern.compile("a*b");
Matcher m = p.matcher("aaaaab");
boolean b = m.matches();
bạn nên làm khá tốt.
Theo dõi ví dụ mã để rõ ràng: lưu ý rằng ví dụ này ngụ ý rõ ràng rằng Trình tạo phù hợp được tạo ra là chuỗi cục bộ với Mẫu và thử nghiệm. Tức là, bạn không nên để lộ Matcher do đó tạo ra cho bất kỳ chủ đề khác.
Thành thật mà nói, đó là rủi ro của bất kỳ câu hỏi an toàn chủ đề nào. Thực tế là bất kỳ mã nào có thể được tạo thành chuỗi không an toàn nếu bạn cố gắng hết sức. May mắn thay, có wonderfulbooks dạy cho chúng tôi một loạt các cách mà chúng tôi có thể làm hỏng mã của chúng tôi. Nếu chúng ta tránh xa những sai lầm đó, chúng ta sẽ giảm đáng kể khả năng của chúng ta về vấn đề luồng.
Nguồn
2009-09-01 01:11:18
Đối tượng mẫu là chủ đề an toàn, nhưng phương thức 'biên dịch()' có thể không.Đã có hai hoặc ba lỗi trong những năm gây ra sự biên dịch thất bại trong môi trường đa luồng. Tôi sẽ khuyên bạn nên làm việc biên dịch trong một khối đồng bộ. –
Có, đã xảy ra lỗi đồng thời trong lớp Mẫu và lời khuyên của bạn về truy cập được đồng bộ hóa được đánh giá cao. Tuy nhiên, các nhà phát triển ban đầu của lớp Pattern nhằm làm cho lớp Pattern là thread an toàn, và đó là hợp đồng mà bất kỳ lập trình viên Java nào cũng có thể dựa vào. Thành thật mà nói, tôi muốn có các biến địa phương luồng và chấp nhận hiệu suất tối thiểu hơn là dựa vào hành vi an toàn của luồng theo hợp đồng (trừ khi tôi đã nhìn thấy mã). Khi họ nói "Threading là dễ dàng, đồng bộ hóa chính xác là khó". –
Lưu ý rằng nguồn của "Mẫu" nằm trong bản phân phối JDK của Oracle (Theo http://www.oracle.com/technetwork/java/faq-141681.html#A14: "SDK Java 2, bản Standard Edition chứa một tệp có tên là src.zip có chứa mã nguồn cho các lớp công khai trong gói java ") để người dùng có thể tự mình xem nhanh. –