2009-05-19 30 views
7

Tôi cần phải tìm cách tách một chuỗi khỏi cuộc gọi tĩnh và không đợi cho đến khi hoàn thành chuỗi. Về cơ bản, một cách tiếp cận "lửa và quên". Ai đó có thể cung cấp cho tôi một ví dụ đơn giản về việc làm thế nào điều này có thể được thực hiện?Java, Đừng chờ đợi một chuỗi hoàn thành

+3

Về cơ bản, hành vi mặc định của một chuỗi - là chuỗi này có cần phải báo hiệu chuỗi gửi đi tại một số điểm hoặc thay đổi trạng thái của biến được chia sẻ không? Thêm chi tiết sẽ được tốt đẹp. – Gandalf

Trả lời

26
Thread t = new Thread(new YourClassThatImplementsRunnable()); 
t.start(); 

// JDK 8 
new Thread(() -> methodYouWantToRun()).start(); 
7
public static void foo() { 
    new Thread() { 
     public void run() { 
        //do something here.... 
     } 
    }.start(); 
} 
+2

Nhưng nếu nhiệm vụ tương đối đơn giản, hãy sử dụng hàm khởi tạo Runnable cho Thread (có nghĩa là, Thread mới (Runnable mới) {/} {public void run() {...}})), vì cách đó bạn không mở rộng lớp phức tạp, nhưng thực hiện một giao diện, nên đơn giản hơn trong bytecode và bạn sẽ không có bất kỳ xung đột tên nào với các phương thức trong Thread. – Gracenotes

2

cơ bản bắt đầu thread và không biểu diễn các tham gia. Vì vậy, bạn sẽ không được chờ đợi cho thread để kết thúc.

8

Nếu đó là một chủ đề tồn tại lâu dài mà có một vòng đời tương tự như ứng dụng của bạn chính nó, và sẽ được dành nhiều thời gian của mình chờ đợi vào các chủ đề khác:

new Thread(new yourLongRunningProcessThatImplementsRunnable()).start(); 

Nếu đó là một thời gian ngắn , Tác vụ bị ràng buộc CPU:

ExecutorService es = Executors.newFixedThreadPool(Runtime.availableProcessors()); 
es.submit(new yourTaskThatImplementsRunnable()); 

Mặc dù, trong hầu hết các trường hợp như thế này, bạn sẽ gửi một số nhiệm vụ đến cùng một số ExecutorService.

Xem:

5

Tuỳ theo tính chất của công việc của bạn, cách khác nhau có thể approrpiate:

(1) Như nhiều người đã đề cập, một cách phổ biến cho một nhiệm vụ thỉnh thoảng chỉ đơn giản là để là xây dựng một chủ đề và gọi bắt đầu của nó() phương pháp.

(2) Hãy nhớ rằng nếu chủ đề nền của bạn không dừng, thì theo mặc định nó sẽ ngăn chương trình của bạn tắt khi các chủ đề khác kết thúc. Do đó, bạn có thể muốn gọi setDaemon (đúng) trên luồng để nó không có hành vi này. (Trong các ứng dụng dựa trên GUI, mặt khác, bạn thường chỉ cần gọi System.exit(), và lý tưởng là bạn sẽ buile vào nhiệm vụ chạy dài của mình một cách sạch cách tắt.)

(3) Nếu bạn thường có các nhiệm vụ ngắn ngủi để "kích hoạt và quên", sau đó xem xét sử dụng Executors framework có sẵn từ Java 5 trở đi.

+0

Tuyệt vời, cảm ơn. – eric2323223

Các vấn đề liên quan