2011-12-08 43 views
5

Tài liệu java cho biết phương pháp nối thêm là chuỗi an toàn. Tuy nhiên, tôi nhớ lại khi tôi thử sử dụng chắp thêm vùng văn bản từ các luồng khác nhau (vài tháng trước), tôi nhận được văn bản lộn xộn trong đó chuỗi 1 sẽ nối thêm một số ký tự và chuỗi 2 sẽ nối thêm một số ký tự khác. Vì vậy, thay vì nhận STRINGstring trong jtextarea, tôi nhận được SstTrRINingG.An toàn chủ đề của JTextArea.append

gì khác biệt sẽ có được giữa:

  1. đồng bộ hóa append
  2. bottlenecking gắn từ chủ đề khác nhau thông qua một threadpoolexecutor
  3. sử dụng invokeLater trên EDT

hoặc là họ tất cả tiền phạt để khắc phục sự cố? Cảm ơn

+1

Tôi thấy tài liệu nói rằng đó là chủ đề an toàn nhưng cũng nói, "Vui lòng xem Cách sử dụng chuỗi để biết thêm thông tin". –

+0

Có một ví dụ liên quan [ở đây] (http://stackoverflow.com/a/3245805/230513). – trashgod

+0

Tôi chưa bao giờ thấy điều đó, chỉ không tin, trong Java + Unicode (UTF-8/16), bạn có thể đăng bài http://sscce.org/ – mKorbel

Trả lời

7

Trong khi append() được an toàn đối với EDT, với chủ đề append() trong Java 7 không phải là. Phụ thêm bằng cách sử dụng invokeLater() sẽ được xử lý theo thứ tự mà chúng là enqueued. Việc kiểm tra quan trọng các phương pháp tiếp cận khác sẽ yêu cầu một số sscce.

+0

Nhấn mạnh được thêm vào. – trashgod

+0

Xem thêm [ví dụ] có liên quan này (http://stackoverflow.com/a/3245805/230513). – trashgod

1

Tất cả các giải pháp của bạn có vẻ ổn với tôi. Vì bạn sẽ cần phải sử dụng một số dạng Invoke để cập nhật giao diện người dùng, có lẽ tốt nhất là chỉ sử dụng invokeLater để tránh bất kỳ biến chứng nào khác.

+0

+1 nó có lẽ là cách dễ nhất để chắc chắn. – trashgod