System.out
trả về luồng đầu ra "chuẩn" - số PrintStream
. Các javadoc của PrintStream
nói với tôi gì về chủ đề an toàn nhưng nhìn vào nguồn gốc của OpenJDK và OracleJDK nói với tôi rằng println
được đồng bộ.Là System.out.println thread-safe theo mặc định?
/**
* Prints a String and then terminate the line. This method behaves as
* though it invokes <code>{@link #print(String)}</code> and then
* <code>{@link #println()}</code>.
*
* @param x The <code>String</code> to be printed.
*/
public void println(String x) {
synchronized (this) {
print(x);
newLine();
}
}
Điều đó phù hợp với trải nghiệm của tôi: Gọi System.out.println()
không bao giờ được tạo ra 'hỗn hợp' khi gọi từ các chủ đề khác nhau.
Vì vậy, câu hỏi của tôi (s):
- Tôi có thể dựa vào hành vi này (sử dụng khác nhau JVM)?
- Có một số tài liệu mà tôi đã bỏ lỡ mô tả hành vi này không?
cũng xem: http://stackoverflow.com/questions/9459657/synchronization-and-system-out-println – slipperyseal