Java多线程如何防止主线的阻塞

2010-3-17    来源:51cto    我要评论
   | |

导读:Java多线程在防止主线的阻塞上有着自己的高招,在不断的学习中我们会发现很多问题都能追述到源代码中。下面我们就详细的看看如何解决问题。

关键词:Java多线程 主线阻塞

 
正在加载数据...

  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多线程代码的相关介绍,希望大家有所收获。

原文出处:http://developer.51cto.com/art/201003/188864.htm
 
 
 
 
 
 

Java Web服务

 
现在事件处理的实际情况是:应用需要从范围很广的应用那里收集信息,这些应用,天生缺乏业务事件这种概念意识。
 
Java发端Sun公司多年来由于其对于Java的保护不够努力而饱受争议。OpenJDK的太对许多人来说有点太晚了。
 
甲骨文于上周四对谷歌提起诉讼,声称谷歌的Android移动操作系统侵犯了甲骨文对Java软件的专利权和版权。谷歌广泛使用开放JDK开发包,使得Java开发者可以快速创建Android应用。
 
近年来,Java领域最有影响力的趋势之一是JVM(Java虚拟机)上对于非Java语言的支持的增加。PHP、Groovy、Ruby以及其他的动态脚本语言已经赢得一席之地。
 
Hibernate的对象关系映射器在执行转换对象到关系实体和关系实体到对象的过程中的静止临界任务时,已经获得了广泛认可。

热门技术手册排行

 

随着开源技术越来越成熟,一个稍有开发经验的人通过学习就可以用开源的产品和技术构建一套可用的系统。对于从事软件开发的人员,尤其是对Java或动态语言相关领域的人来说,“开源”也许是他们最喜爱的单词。但是,很多时候我们需要的不仅仅是一个可用的系统,而是希望这个系统开发更简易、性能更高和扩展性更好等。这确实是一个令人头痛的问题。本指南很多地方都是点到为止,要深入了解相关信息的读者请借助参考资料、网站等自行挖掘。

 

本专题分六部分探讨SOA设计模式,当初设计面向服务架构的一大初衷就是降低服务间耦合度,由此提高服务的灵活性和自由度。

 

TOAGF是一个架构框架,简而言之,TOGAF是一种协助发展,验收,运行,使用,和维护架构的工具。它是基于一个迭代(Iterative)的过程模型,支持最佳实践和一套可重用的现有架构资产。

 

业务流程管理(business process management,bpm)不是一个新概念,甚至不是一个新名词。它是从相关的业务流程变革领域,如业务流程改进(bpi)、业务流程重组(bpr)、业务流程革新中发展起来的。流程管理技术也是从早期的工作流管理、eai、流程自动化、流程集成、流程建模、流程优化等技术中发展起来的。

 

ESB(Enterprise Service Bus,企业服务总线)是传统中间件技术与XML、Web服务等技术结合的产物。ESB提供了网络中最基本的连接中枢,是构筑企业神经系统的必要元素。

 

云计算的概念越来越流行,Amazon、Google和IBM是第一批将云计算引入公众视线的公司。云计算就是新的Web2.0,一种既有技术上的市场绽放。

查看更多
 
 

登录TechTarget中国

关闭
本服务仅向TechTarget中国的会员开放,请登录或立即免费注册
电子邮件地址:
请输入您的电子邮件地址
密码:
下次自动登录