Tôi đang xây dựng một Chuỗi ra khỏi nhiều phần và muốn sử dụng hoặc StringBuffer
hoặc StringBuilder
để làm như vậy. Từ 5 tài liệu Java, tôi thấy rằng StringBuilder
được ưa thích khi có thể, với sự báo trước rằngJava StringBuilder và An toàn Chủ đề
Instances của
StringBuilder
không an toàn để sử dụng bởi nhiều chủ đề.
Từ tuyên bố này, tôi hiểu rằng tôi không nên có một cá thể StringBuilder
được chia sẻ bởi nhiều chủ đề. Nhưng những gì về trường hợp này:
//Is this safe?
//foo() is called simultaneously by multiple threads
String foo(String a, String b) {
return new StringBuilder(a).append(b).toString();
}
Ở đây có thể có nhiều chủ đề trong chức năng cùng một lúc, sử dụng lớp StringBuilder
cùng một lúc (ví dụ, truy cập đồng thời các biến tĩnh, nếu có bất kỳ), nhưng mỗi chuỗi sẽ có một phiên bản riêng biệt là StringBuilder
. Từ tài liệu, tôi có thể không hoàn toàn quyết định xem điều này được tính là sử dụng bởi nhiều chủ đề hay không.
có thể có một số lợi ích khi thực hiện foo() một phương thức tĩnh, vì nó không chạm vào bất kỳ biến mẫu nào. – Kip
@Kip: Tùy thuộc vào lớp học. Nhưng một số lần bạn có thể muốn thực hiện các hoạt động đa hình và làm cho phương thức tĩnh sẽ cản trở điều này. – OscarRyz
Sử dụng String.concat sẽ nhanh hơn, nhưng tôi nghĩ đây chỉ là một ví dụ. –