2011-06-30 40 views
6

Tôi tò mò muốn biết liệu có điều gì đó tương tự như Thư viện song song nhiệm vụ từ C# trong Java và/hoặc SDK Android hay không. Xuất phát từ nền C#, chúng tôi được dạy rằng tạo một chuỗi mới là một hoạt động tương đối nặng và được hướng dẫn sử dụng threadpool, hoặc gần đây hơn, Tasks.TPL Tương đương với Java/Android

Vì vậy, trong tâm trí của tôi, mức độ trừu tượng mà Nhiệm vụ mang lại sẽ là lý tưởng ... là có bất cứ điều gì như thế, hoặc thậm chí threadpool? hoặc thực hiện tất cả chỉ liên quan đến việc tạo Thread mới hoặc thực hiện my own threadpool

+0

Liên quan đến tuyên bố "hoạt động hạng nặng", xem http://stackoverflow.com/questions/2117072/java-thread-creation-overhead – skaffman

+0

Thấy rằng câu hỏi này là 3 tuổi - bất kỳ ai có cập nhật về trạng thái của nghệ thuật ngày nay? Chúng ta vẫn đang sử dụng Executors và Java 5 Concurrency? Hoặc có những triển khai mới như công cụ trong Java 8 hoặc RxJava mà giải quyết điều này tốt hơn? – Nilzor

Trả lời

3

chắc nó. Bạn có thể đọc thêm về nó ở đây: Executors

Ngoài ra, bạn có thể bao quát toàn bộ chủ đề đồng thời tại cùng một trang: Concurrency

+0

Trừ khi tôi thiếu một cái gì đó, điều này không cung cấp hỗ trợ tiếp tục. Không nói rằng bạn không thể thực hiện nó trên đầu trang này, nhưng tôi nghi ngờ nó sẽ là khá khó khăn để có được quyền và sẽ khá khó chịu cú pháp quá. –

+0

@KentBoogaart Có, Java không cung cấp bất cứ điều gì tương tự như nhiệm vụ tiếp tục, bạn phải mã tất cả một mình. Cá nhân, tôi thấy nhiệm vụ tiếp tục một liên lạc xấu, nhưng nếu bạn đang ở trong đó, bạn có thể nhìn vào khuôn khổ Lightwolf: http://lightwolf.sourceforge.net/index.html – bezmax

+0

Bạn đang đọc nhiều hơn.Có vẻ như tôi có thể sử dụng công cụ ngã ba/tham gia để đạt được một cái gì đó tương tự trong tự nhiên, mặc dù không chắc chắn như thế nào thanh lịch/duy trì nó sẽ được. –

1

Android đã hỗ trợ cho thư viện đồng thời Javas nhưng bạn nên xem xét AsyncTask mà hỗ trợ chạy các hoạt động trên cả hai trên thread UI và ở chế độ nền.

Dưới đây là một ví dụ ngắn của một tác vụ:

private class CharCountTask extends AsyncTask<String, Integer, Long> { 
    protected Long doInBackground(String... in) { 
    long result = 0; 
    for(int i=0,n=in.length; i<n; i++) { 
     result += in[i].length(); 
     publishProgress((int) (i/(double) count) * 100); 
    } 
    return result; 
    } 

    protected void onProgressUpdate(Integer... progress) { 
    // update progress here 
    updateProgressBar(progress[0]); 
    } 

    protected void onPostExecute(Long result) { 
    // update the UI here 
    setTotalChars(result); 
    } 
} 

Để sử dụng nó:

new CharCountTask().execute("first", "second", "third"); 
0

Nhìn vào khuôn khổ Task4Java tại https://github.com/dtag-dbu/task4java/.

Framework này được xây dựng trên các thư viện Java chuẩn và cũng chạy trên Android. Hiện tại chúng tôi đang tạo một ứng dụng mẫu để thể hiện sức mạnh của khung công tác này.