Tiêu đề tốt cho biết, sự khác biệt giữa Executors.newSingleThreadExecutor().execute(command)
và new Thread(command).start();
Sự khác biệt giữa Executors.newSingleThreadExecutor(). Execute (command) và new Thread (command) .start();
Trả lời
Hành vi, không có gì nhiều.
Tuy nhiên, khi bạn có một phiên bản Executor
, bạn có thể gửi nhiều tác vụ cho nó và thực hiện nhiều tác vụ này với nhau. Bạn không thể làm điều đó chỉ đơn giản với một số liệu Thread
.
Nếu một lỗi hoặc RuntimeException được ném trong Executor nó sẽ được nuốt âm thầm, các Chủ đề mới() sẽ in nó để System.err
Một khác biệt đáng chú ý, là khi bạn chạy new Thread(someRunnable).start();
khi Runnable xong sợi chỉ sẽ chết lặng lẽ.
Người thực thi sẽ vẫn tồn tại cho đến khi bạn tắt nó. Vì vậy, chạy Executors.newSingleThreadExecutor().execute(command)
Khi bạn nghĩ rằng ứng dụng của bạn hoặc JVM có thể được hoàn thành thì Executor vẫn có thể đang chạy trong một luồng nền.
Dường như không phải như vậy: https://www.farside.org.uk/201309/learning_from_bad_code – assylias
Thú vị, tôi không thể tranh luận với phần lớn những gì anh ta nói. Tôi không thể tạo lại cuộc gọi 'finalize' sau khi' submit' hoàn tất. Tôi chạy một thử nghiệm 'main' đơn giản và TPE ủy nhiệm không bao giờ là GC'd. –
Tôi chưa thử nghiệm thành thật. – assylias
Executors.newSingleThreadExecutor(). Execute (command) sẽ sử dụng lại chuỗi đã được tạo trước đó, nó sẽ không tạo chủ đề mới như trường hợp Thread mới(). Nếu chuỗi chưa được sử dụng trong sáu mươi giây bị chấm dứt, Đó là một loại nhóm chứa một chuỗi đơn lẻ làm cho nó tương đương với newFixedThreadPool (1).
Tôi thích sử dụng ExecutorService
hoặc ThreadPoolExecutor
ngay cả đối với các chuỗi chữ số đơn. Chúng cung cấp sự linh hoạt hơn.
Có một cái nhìn tại ExecutorService
& ThreadPoolExecutor
phần trong câu hỏi SE liên quan:
java Fork/Join pool, ExecutorService and CountDownLatch
Java's Fork/Join vs ExecutorService - when to use which?
Giả sử rằng bạn đã bắt đầu với chủ đề riêng của bạn thay vì ExecutorService
. Trong tương lai, nếu có nhu cầu hỗ trợ nhiều chủ đề, ExecutorService
hoặc ThreadPoolExecutor
sẽ cung cấp khả năng kiểm soát và tính linh hoạt tốt hơn cho bạn. Bạn có thể tinh chỉnh số lượng tham số được yêu cầu trong các API dưới đây.
ThreadPoolExecutor(int corePoolSize, int maximumPoolSize, long keepAliveTime,
TimeUnit unit, BlockingQueue<Runnable> workQueue, ThreadFactory threadFactory,
RejectedExecutionHandler handler)
- 1. Sự khác biệt giữa "coroutine" và "thread"?
- 2. Sự khác biệt giữa 'File.Open()' và 'new FIleStream()'
- 3. Sự khác biệt giữa "new A()" và "A.newInstance()" là gì?
- 4. Trong Javascript, sự khác biệt giữa 'Object.create' và 'new'
- 5. là gì sự khác biệt giữa Chủ đề start() và chạy Runnable()
- 6. Execute MySQL Stored Procedure sử dụng Command Line
- 7. sự khác biệt giữa:.! và: r !?
- 8. Sự khác nhau giữa Thread # run và Thread # wakeup?
- 9. Gọi Command Prompt và Leave Window Mở
- 10. Sự khác biệt giữa SwingWorker và Executor
- 11. Sự khác nhau giữa MyClass.prototype = new Object() và MyClass.prototype = Object
- 12. C#: Sự khác nhau giữa '+ = anEvent' và '+ = new EventHandler (anEvent)'
- 13. Sự khác nhau giữa Shadows (VB.NET) và New (C#)
- 14. Assign và tạo new String khác biệt
- 15. Sự khác biệt giữa $ (...) và `...`
- 16. Sự khác biệt giữa. và #
- 17. Sự khác biệt giữa $ * và $ @
- 18. Sự khác biệt giữa ". +" Và ". +?"
- 19. Sự khác biệt giữa "**/* /" và "** /"?
- 20. Sự khác biệt giữa = và: =
- 21. Sự khác biệt giữa jquery và $
- 22. sự khác biệt giữa Interlocked.Exchange và Volatile.Write?
- 23. Chạy java từ Eclipse hoặc Command prompt
- 24. Powershell -Command trên nhiều dòng
- 25. sự khác biệt giữa Lazy.Force() và Lazy.Value
- 26. Visual Studio Command Window
- 27. C#: sự khác biệt giữa SomeEvent + = Phương pháp và SomeEvent + = new Đại biểu (Method)
- 28. LINQ - Sự khác biệt giữa .Select (n => n.Name) và .Select (n => new {n.Name});
- 29. sự khác biệt giữa PrintWriter và OutputStream
- 30. Sự khác biệt giữa RoutedEventHandler và EventHandler
Ồ đúng rồi, thậm chí không nghĩ về điều đó. Cảm ơn. –