<div class="gmail_quote"><font size="2">
<div>Hello,</div>
<div> </div>
<div>Hope you all doing very well.</div>
<p>I have a software (spring app) which is basically crawling the web pages, and I want to control that crawling execution (start, stop and check status) from other application using web-service, I need to expose three operations: start, stop and check. Please check the design below:</p>

<p>I have one Crawler class extending the Thread class (Singleton):</p>
<p>public class Crawler extends Thread {</p>
<p>// ... some code here</p>
<p>private static Crawler obj;</p>
<p>private volatile boolean isRunning = false;</p>
<p>private Crawler(){</p>
<p>}</p>
<p>public synchronized static Crawler getInstance(){</p>
<p>if(obj == null){</p>
<p>obj = new BusinessObject();</p>
<p>}</p>
<p>return obj;</p>
<p>}</p>
<p>public void run(){</p>
<p>while(isRunning){</p>
<p>// Crawling the webpages and storing html in DB.</p>
<p>}</p>
<p>}</p>
<p>public void stopCrawler(){</p>
<p>isRunning = false;</p>
<p>}</p>
<p>public boolean status(){</p>
<p>return isRunning;</p>
<p>}</p>
<p>}</p>
<p>}</p>
<p>I have one web-service class extending ServletEndpointSupport (spring web-service):</p>
<p>public class CrawlerManagerService extends ServletEndpointSupport {</p>
<p>Crawler crawler = Crawler.getInstance();</p>
<p>public String start(){</p>
<p>if( !crawler.status() ){</p>
<p>crawler.start();</p>
<p>}</p>
<p>return &quot;RUNNING&quot;;</p>
<p>}</p>
<p>public String stop(){</p>
<p>if(crawler.status()){</p>
<p>crawler.stopCrawler();</p>
<p>}</p>
<p>return &quot;NOT-RUNNING&quot;;</p>
<p>}</p>
<p>public String status(){</p>
<p>return ( ( crawler.status )?&quot;RUNNING&quot;:&quot;NOT-RUNNING&quot;);</p>
<p>}</p>
<p>}</p>
<p> </p></font><font face="Times New Roman">
<p>I exposed 3 methods:<br><br>start(); // to start the process in thread (i just want a single thread)<br>stop(); // to stop the thread<br>status(); // check the current status of that thread</p>
<p>But everytime i am calling this webservice its creating a new thread and starting service. for now i did one workaround to fix this issue:</p>
<p>I am searching all running threads:</p>
<p>Thread[] allSystemThreads; // suppose i have all running threads in system</p>
<p>den:</p>
<p>Crawler crl = null;</p>
<p>for(Thread t : allSystemThreads){</p>
<p>if(t instanceof Crawler){</p>
<p>crl = (Crawler) t;</p>
<p>break;</p>
<p>}</p>
<p>}</p>
<p>if(crl != null){</p>
<p>// i found the thread now i can start, stop and check status here</p>
<p>}</p>
<p> </p>
<p>but i am not sure if its a good way to search for all threads and do the required operation. can you please advise any possiblity in java.util.concurrent package to utilize it in a standard way? so that i dont need to go deeply to manage the threads. Please help me.</p>

<p>Looking forward to hear from you.</p>
<p>Regards,<br><font color="#888888">Mubeen Shah</font></p></font></div>