Tôi có một chuỗi tải xuống dữ liệu và tôi muốn đợi cho đến khi quá trình tải xuống hoàn tất trước khi tôi tải dữ liệu. Có cách nào tiêu chuẩn để làm điều này?Java Đợi thread hoàn thành
Thông tin khác:
Tôi có một lớp Tải xuống nhận dữ liệu từ URL (POJO được tuần tự hóa). Tải xuống là Runnable và Observable. Nó theo dõi các byte tải về và tải về kích thước. Tôi có một thanh tiến trình hiển thị tiến trình cho Người dùng. GUI quan sát Tải xuống để cập nhật thanh tiến trình.
Khi POJO được tải xuống, tôi muốn tải xuống và chuyển sang bước tiếp theo. Mỗi bước phải chờ cho đến khi kết thúc trước. Vấn đề là tôi không thể nghĩ ra một cách để tạm dừng ứng dụng của tôi để chờ chuỗi tải xuống. Sau khi tải xong, tôi muốn gọi download.getObject() sẽ trả về dữ liệu dưới dạng đối tượng. Sau đó tôi có thể truyền và tiếp tục với bản tải xuống tiếp theo.
Tôi có một lớp trợ giúp quản lý URL để tải xuống và thực hiện tất cả các cuộc gọi để Tải xuống. Cuộc gọi này sẽ gọi getObject và thực hiện quá trình truyền. Gui gọi helper.getUser(). helper bắt đầu thread chạy và tôi muốn nó 'biết' khi nó được hoàn thành để nó có thể trả về đối tượng được đúc.
Bất kỳ đề xuất/ví dụ nào? Tôi đang ở giai đoạn đầu của thiết kế này vì vậy tôi sẵn sàng thay đổi nó.
Cảm ơn bạn.
Cập nhật:
Tôi đi theo http://download.oracle.com/javase/6/docs/api/javax/swing/SwingWorker.html#get và sử dụng phương thức để chặn cho đến khi thread kết thúc. Mã rất lộn xộn và tôi không thích cách tiếp cận này. Tôi sẽ tiếp tục cố gắng tìm một cách 'sạch' để xử lý quy trình tải xuống.
tôi đã cố gắng tham gia() nhưng mà giữ GUI từ cập nhật. Lý do tôi sử dụng Thread là giữ cho gui cập nhật trong khi quá trình tải xuống diễn ra. Cuộc gọi tham gia ngăn chặn điều đó xảy ra. – Allan
tham gia() sẽ hoạt động. nếu GUI ngừng cập nhật, bạn có thể phải chi tiết hơn về những chủ đề bạn đang tham gia. Tôi sẽ không tham gia EDT. – akf
Sau đó, bạn cần đảm bảo rằng bạn không gọi 'join()' trong chuỗi xoay. Bạn có thể thực hiện việc này bằng cách tạo một chuỗi phụ trách chuỗi tải xuống của bạn. Đây là bản chất chỉ là một nhân viên nền mà bạn có thể quên đi. Đây là luồng công nhân biết khi nào quá trình tải xuống hoàn tất và phải làm gì tại thời điểm đó. Bạn chỉ cần đảm bảo chỉnh sửa đối tượng xoay được thực hiện trong chủ đề xoay. – unholysampler