Tôi đang viết một ứng dụng sinh ra nhiều tác vụ đồng thời. Tôi đang sử dụng một hồ bơi thread để thực hiện điều đó.làm thế nào để ngăn chặn một sợi trong một threadpool
Có thể xảy ra sự kiện xảy ra làm cho các tính toán được thực hiện trong các tác vụ không hợp lệ. Trong trường hợp đó, tôi muốn dừng các tác vụ hiện đang chạy và bắt đầu các tác vụ mới.
Vấn đề của tôi: Làm thế nào để dừng các tác vụ hiện đang chạy? Giải pháp mà tôi đã triển khai là lưu trữ một tham chiếu đến chuỗi nhiệm vụ và gọi interrupt()
về chủ đề này. Trong code demo:
public class Task implements Runnable {
private String name;
private Thread runThread;
public Task(String name) {
super();
this.name = name;
}
@Override
public void run() {
runThread = Thread.currentThread();
System.out.println("Starting thread " + name);
while (true) {
try {
Thread.sleep(4000);
System.out.println("Hello from thread " + name);
} catch (InterruptedException e) {
// We've been interrupted: no more messages.
return;
}
}
}
public void stop() {
runThread.interrupt();
}
public String getName() {
return name;
}
}
Và phương pháp chính là:
public static void main(String args[]) {
executorService = Executors.newFixedThreadPool(2);
Task t1 = new Task("Task1");
Task t2 = new Task("Task2");
executorService.execute(t1);
executorService.execute(t2);
executorService.execute(new Task("Task3"));
executorService.execute(new Task("Task4"));
try {
Thread.sleep(12000);
t1.stop();
System.err.println("Stopped thread " + t1.getName());
Thread.sleep(8000);
t2.stop();
System.err.println("Stopped thread " + t2.getName());
} catch (InterruptedException e) {
e.printStackTrace();
}
}
Đây có phải là một giải pháp tốt, hoặc là có một cách tốt hơn để ngăn chặn một thread chạy trong một hồ bơi thread?
Kéo phích cắm;) – sje397