मैं एक ऐसा एप्लीकेशन लिख रहा हूं जो एकाधिक समवर्ती कार्यों को जन्म दे। मैं इसे लागू करने के लिए एक थ्रेड पूल का उपयोग कर रहा हूँ।थ्रेडपूल में धागे को कैसे रोकें
ऐसा हो सकता है कि एक घटना होती है जो अमान्य कार्यों में गणना की जाती है। उस स्थिति में, मैं वर्तमान में चल रहे कार्यों को रोकना चाहता हूं, और नए शुरू करना चाहता हूं।
मेरी समस्या: मैं वर्तमान में चल रहे कार्यों को कैसे रोकूं? मैंने जिस समाधान को कार्यान्वित किया है वह कार्य धागे के संदर्भ को संग्रहीत करना है और इस धागे पर interrupt()
पर कॉल करना है। डेमो कोड में:
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;
}
}
और मुख्य विधि है:
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();
}
}
यह एक अच्छा समाधान है, या वहाँ एक बेहतर एक धागा पूल में चल रहे धागा बंद करने के लिए तरीका है?
प्लग खींचें;) – sje397