জাভাতে থ্রেডটি সঠিকভাবে বন্ধ করার জন্য আমার একটি সমাধান দরকার।
আমার IndexProcessor
ক্লাস রয়েছে যা চলমানযোগ্য ইন্টারফেস প্রয়োগ করে:
public class IndexProcessor implements Runnable {
private static final Logger LOGGER = LoggerFactory.getLogger(IndexProcessor.class);
@Override
public void run() {
boolean run = true;
while (run) {
try {
LOGGER.debug("Sleeping...");
Thread.sleep((long) 15000);
LOGGER.debug("Processing");
} catch (InterruptedException e) {
LOGGER.error("Exception", e);
run = false;
}
}
}
}
এবং আমার ServletContextListener
ক্লাস রয়েছে যা থ্রেড শুরু করে এবং থামায়:
public class SearchEngineContextListener implements ServletContextListener {
private static final Logger LOGGER = LoggerFactory.getLogger(SearchEngineContextListener.class);
private Thread thread = null;
@Override
public void contextInitialized(ServletContextEvent event) {
thread = new Thread(new IndexProcessor());
LOGGER.debug("Starting thread: " + thread);
thread.start();
LOGGER.debug("Background process successfully started.");
}
@Override
public void contextDestroyed(ServletContextEvent event) {
LOGGER.debug("Stopping thread: " + thread);
if (thread != null) {
thread.interrupt();
LOGGER.debug("Thread successfully stopped.");
}
}
}
তবে যখন আমি টমকাট বন্ধ করি, তখন আমি আমার ইনডেক্স প্রসেসর শ্রেণিতে ব্যতিক্রম পাই:
2012-06-09 17:04:50,671 [Thread-3] ERROR IndexProcessor Exception
java.lang.InterruptedException: sleep interrupted
at java.lang.Thread.sleep(Native Method)
at lt.ccl.searchengine.processor.IndexProcessor.run(IndexProcessor.java:22)
at java.lang.Thread.run(Unknown Source)
আমি জেডিকে ১.6 ব্যবহার করছি। সুতরাং প্রশ্নটি হ'ল:
আমি কীভাবে থ্রেডটি থামাতে পারি এবং কোনও ব্যতিক্রম ছোঁড়াতে পারি না?
PS আমি .stop();
পদ্ধতিটি ব্যবহার করতে চাই না কারণ এটি অবনমিত।
InterruptedException
এ পাওয়া যাবে ।
InterruptedException
। এটি আমি যা মনে করি তা হ'ল তবে আমিও আশ্চর্য হয়েছি যে স্ট্যান্ডার্ড উপায়টি কেমন।