Nhưng, tôi không hiểu làm thế nào để bắt đầu các số n của chủ đề hành xử giống như khái niệm đa luồng. Tôi muốn họ chạy song song.
Bạn chắc chắn có thể tạo ra một loạt các chủ đề sử dụng một vòng lặp:
Thread[] threads = new Thread[NUM_JOBS_TO_CREATE];
for (int i = 0; i < threads.length; i++) {
threads[i] = new Thread(new Runnable() {
public void run() {
// some code to run in parallel
// this could also be another class that implements Runnable
}
});
threads[i].start();
}
Điều này sẽ gây ra các chủ đề để chạy trong nền song song. Sau đó, bạn có thể tham gia với họ sau đó để chờ tất cả họ hoàn thành trước khi tiếp tục.
// wait for the threads running in the background to finish
for (Thread thread : threads) {
thread.join();
}
Nhưng thay vì tự quản lý chủ đề, tôi khuyên bạn nên sử dụng tên dựng sẵn Java Executors
. Họ làm tất cả điều này cho bạn được dễ dàng hơn để quản lý. Một trong những lợi ích của phương pháp này là nó phân tách các nhiệm vụ từ các chủ đề chạy chúng. Bạn có thể bắt đầu, ví dụ, 10 chủ đề để chạy 1000 và 1000 nhiệm vụ song song.
Dưới đây là một số mẫu ExecutorService
mã:
// create a pool of threads, 10 max jobs will execute in parallel
ExecutorService threadPool = Executors.newFixedThreadPool(10);
// submit jobs to be executing by the pool
for (int i = 0; i < NUM_JOBS_TO_CREATE; i++) {
threadPool.submit(new Runnable() {
public void run() {
// some code to run in parallel
// this could also be another class that implements Runnable
}
});
}
// once you've submitted your last job to the service it should be shut down
threadPool.shutdown();
// wait for the threads to finish if necessary
threadPool.awaitTermination(Long.MAX_VALUE, TimeUnit.MILLISECONDS);
Mọi chi tiết, xem các Java tutorial on the thread executors.
Hãy chắc chắn chấp nhận câu trả lời của tôi nếu nó hữu ích. – Gray