Java多线程在我们尽情的使用中存在着很多的问题,首先就是如何解决主线的阻塞问题。看完下面的代码希望你对此有所启发。在不断的学习中才能有更好的技术突破。Java多线程防止主线阻塞代码如下:
以下是引用片段: if(e.getSource()==startItem) {//运行多线程爬虫 stateLabel.setText(“运行中….”); try { URL url_url=new URL(web_url); web_host=url_url.getHost(); } catch (MalformedURLException e2) { e2.printStackTrace(); } if(tpool==null) { // System.out.println(“运行”); new Thread( new Runnable(){ public void run() { //要在另一个线程做得事情 // System.out.println(“啦啦啦啦”); tpool=new ThreadPoolExecutor(minN,maxN,aliveT, TimeUnit.SECONDS, new LinkedBlockingQueue<Runnable>()/*, new ThreadPoolExecutor.CallerRunsPolicy()*/); //editor_pane.setText(“创建线程池:<br>”); String tempstr=”<hr>” + “创建线程池:” + “<br>设置最小线程数目:”+minN+ “<br>设置最大线程数目:”+maxN+ “<br>设置空闲线程存活时间(秒):”+aliveT+ “<br>设置阻塞线程队列大小为:”+blockQN+ “<hr>” + “设置本地映射目录为:” + “<br>”+dir_path+ “<hr>” + “<br>爬取入口网页为:” + “<br>”+web_url+”<hr>”; setEditorContent(false,tempstr); addToUnProQ(web_url); String geturl=null; getPage gt=null; while((!isUnProQEmpty())||!tpool.isTerminated())//有没有处理的连接或者tpool没有结束 {//如果 还有连接没有被处理 geturl=delFromUnProQ(); if(geturl!=null) { addToProQ(geturl); gt=new getPage(geturl); tpool.execute(gt); } try {//等待0.2秒 以便在队列中能够有更多的链接 Thread.sleep((long)(Math.random()*200)); } catch (InterruptedException e1) { e1.printStackTrace(); } } tpool.shutdown(); tpool=null; stateLabel.setText(“欢迎使用本网站结构分析软件”); //setEditorContent(true,shuoming); } }).start(); } else { showMessageBox(“已经开始运行了….”); String comd = “explorer http://www.blesslucky.com/”; try { Runtime.getRuntime().exec(comd); } catch (IOException e1) { e1.printStackTrace(); } } } |
以上就是对Java多线程代码的相关介绍,希望大家有所收获。
我们一直都在努力坚持原创.......请不要一声不吭,就悄悄拿走。
我原创,你原创,我们的内容世界才会更加精彩!
【所有原创内容版权均属TechTarget,欢迎大家转发分享。但未经授权,严禁任何媒体(平面媒体、网络媒体、自媒体等)以及微信公众号复制、转载、摘编或以其他方式进行使用。】
微信公众号
TechTarget
官方微博
TechTarget中国