Java多线程在我们尽情的使用中存在着很多的问题首先就是如何解决主线的阻塞问题看完下面的代码希望你对此有所启发在不断的学习中才能有更好的技术突破Java多线程防止主线阻塞代码如下
if(egetSource()==startItem)
{//运行多线程爬虫
stateLabelsetText(运行中);
try {
URL url_url=new URL(web_url);
web_host=url_urlgetHost();
} catch (MalformedURLException e) {
eprintStackTrace();
}
if(tpool==null)
{
// Systemoutprintln(运行);
new Thread(
new Runnable(){
public void run()
{
//要在另一个线程做得事情
// Systemoutprintln(啦啦啦啦);
tpool=new ThreadPoolExecutor(minNmaxNaliveT
TimeUnitSECONDS
new LinkedBlockingQueue<Runnable>()/*
new ThreadPoolExecutorCallerRunsPolicy()*/);
//editor_panesetText(创建线程池:<br>);
String tempstr=<hr> +
创建线程池: +
<br>设置最小线程数目+minN+
<br>设置最大线程数目+maxN+
<br>设置空闲线程存活时间(秒)+aliveT+
<br>设置阻塞线程队列大小为+blockQN+
<hr> +
设置本地映射目录为 +
<br>+dir_path+
<hr> +
<br>爬取入口网页为 +
<br>+web_url+<hr>;
setEditorContent(falsetempstr);
addToUnProQ(web_url);
String geturl=null;
getPage gt=null;
while((!isUnProQEmpty())||!tpoolisTerminated())
//有没有处理的连接或者tpool没有结束
{//如果 还有连接没有被处理
geturl=delFromUnProQ();
if(geturl!=null)
{
addToProQ(geturl);
gt=new getPage(geturl);
tpoolexecute(gt);
}
try {//等待秒 以便在队列中能够有更多的链接
Threadsleep((long)(Mathrandom()*));
} catch (InterruptedException e) {
eprintStackTrace();
}
}
tpoolshutdown();
tpool=null;
stateLabelsetText(欢迎使用本网站结构分析软件);
//setEditorContent(trueshuoming);
}
})start();
}
else
{
showMessageBox(已经开始运行了不要乱按了
闲得慌就到网站看文章去吧);
String comd = explorer ;
try {
RuntimegetRuntime()exec(comd);
} catch (IOException e) {
eprintStackTrace();
}
}
}
以上就是对Java多线程代码的相关介绍希望大家有所收获