- 浏览: 81319 次
- 性别:
- 来自: 信阳
最新评论
-
Mr_pop:
jqplot 的一些补充 -
zz_wangyuhoho:
你好,那么我在linux下,把 实际IP地址(10.10.10 ...
EJB(一) -
zkx1217:
请教下,画Pie chart 时,总共有三部分,其中2部分占的 ...
jqplot 的一些补充 -
yexiongMYBH:
您好,我想请问你一下,我如果只单单用jsf.ajax.requ ...
JSF AJAX 的理解 -
ligangbin117:
我觉得还有更简单的方法,这边要求也是显示百分比和数量两个值。可 ...
jqplot 的一些补充
这个 例子是在IBM的一个文章中找到的,http://www.ibm.com/developerworks/cn/java/j-lo-concurrent-frmk/index.html
我只是作出了自己的实现,虽然比不上别人,但是也算是学习了
先贴代码:
<?xml version="1.0" encoding="UTF-8"?> <threadlist> <thread-ins thread-id="1"/> <thread-ins thread-id="2"> <pre-threadID>1</pre-threadID> </thread-ins> <thread-ins thread-id="3"> <pre-threadID>2</pre-threadID> </thread-ins> <thread-ins thread-id="4"> <pre-threadID>2</pre-threadID> <pre-threadID>3</pre-threadID> </thread-ins> <thread-ins thread-id="5"> <pre-threadID>3</pre-threadID> </thread-ins> <thread-ins thread-id="6"> <pre-threadID>4</pre-threadID> <pre-threadID>5</pre-threadID> </thread-ins> <thread-ins thread-id="7"> <pre-threadID>6</pre-threadID> </thread-ins> </threadlist>
这个是xml的格式,这个xml表示了线程之间的依赖关系
我的结构上是ThreadEntity
代码如下
package com.simple; import java.util.HashMap; import java.util.Map; public class ThreadEntity { private Integer threadID; private Map<Integer,ThreadEntity> preEntities; private Thread process; private boolean ready = false; public ThreadEntity(){ preEntities = new HashMap<Integer, ThreadEntity>(); process = new Thread(new Runnable() { @Override public void run() { System.out.println("this ThreadEntity ID:" + ThreadEntity.this.threadID); } }); } public void runProcess(){ if(process.getState() == Thread.State.NEW){ process.start(); } } public Integer getThreadID() { return threadID; } public void setThreadID(Integer threadID) { this.threadID = threadID; } public Map<Integer, ThreadEntity> getPreEntities() { return preEntities; } public void addPreEntity(ThreadEntity te){ this.preEntities.put(te.getThreadID(), te); } public boolean isReady(){ return this.ready; } public void setReady(boolean Flag){ this.ready = Flag; } public Thread.State getState(){ return process.getState(); } }
下面是一个list存放ThreadEntity
package com.simple; import java.util.List; /** * 描述: * @author tippy * @date 2011-5-15 */ public class ThreadList { private List<ThreadEntity> threadlist; public List<ThreadEntity> getThreadlist() { return threadlist; } public void setThreadlist(List<ThreadEntity> threadlist) { this.threadlist = threadlist; } }
最后是解析xml的代码,对了解使用java自带的dom解析xml的可以不看
package com.support; import java.io.IOException; import java.io.InputStream; import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map; import javax.xml.parsers.DocumentBuilder; import javax.xml.parsers.DocumentBuilderFactory; import org.w3c.dom.Document; import org.w3c.dom.Element; import org.w3c.dom.Node; import org.w3c.dom.NodeList; import com.simple.ThreadEntity; //用Java自带的xml parser进行解析xml文档 public class SimpleParse { public SimpleParse(){ } //算法采用的是,如果这个element有pre-thread 那么就递归,解析pre-thread 对应的threadins public static List<ThreadEntity> parseSimpleXML(){ DocumentBuilderFactory domfac = DocumentBuilderFactory.newInstance(); InputStream is = null; //store the ThreadEntity List<ThreadEntity> threadList = new ArrayList<ThreadEntity>(); try{ DocumentBuilder dombuilder = domfac.newDocumentBuilder(); is = Thread.currentThread().getContextClassLoader().getResourceAsStream("simple.xml"); Document doc = dombuilder.parse(is); Element rootElt = doc.getDocumentElement(); //get threadins nodes NodeList threadNodes = rootElt.getChildNodes(); //store the node which has been acess Map<Node,ThreadEntity> threadMap = new HashMap<Node,ThreadEntity>(); if(threadNodes != null) { //iterator the threadins for(int i = 0;i < threadNodes.getLength();i++){ Node threadins = threadNodes.item(i); if(threadins.getNodeType() == Node.ELEMENT_NODE){ threadList.add(parseSimpleNode(threadins, threadMap, threadNodes)); } } } }catch(Exception e){ e.printStackTrace(); }finally{ if(is != null){ try { is.close(); } catch (IOException e) { System.out.println("close is 失败"); } } } return threadList; } static ThreadEntity parseSimpleNode(Node currNode,Map<Node,ThreadEntity> historyNodes,NodeList threadNodes){ ThreadEntity currEntity = historyNodes.get(currNode); //is not exist these nodes if(currEntity == null){ //create a new Instance currEntity = new ThreadEntity(); //set this entity id currEntity.setThreadID(Integer.parseInt(currNode.getAttributes().getNamedItem("thread-id").getNodeValue())); //get the pre-threadID Nodes NodeList preNodes = currNode.getChildNodes(); if(preNodes != null && preNodes.getLength() != 0){ for(int i = 0;i<preNodes.getLength();i++){ //get current preNode child Node preNode = preNodes.item(i); //if exit child element pre-threadID if(preNode.getNodeType() == Node.ELEMENT_NODE){ currEntity.setReady(false); Node threadNode = checkNode(preNode.getTextContent(),threadNodes); ThreadEntity preEntity = parseSimpleNode(threadNode, historyNodes, threadNodes); currEntity.addPreEntity(preEntity); } } } //put this entity to history historyNodes.put(currNode, currEntity); } return currEntity; } /** *描述: *2011-5-15 */ private static Node checkNode(String attrValue, NodeList threadNodes) { Node wishNode = null; for(int i = 0;i<threadNodes.getLength();i++){ Node currNode = threadNodes.item(i); if(currNode != null &&currNode.getNodeType() == Node.ELEMENT_NODE && currNode.getAttributes().getNamedItem("thread-id").getNodeValue().equals(attrValue)){ wishNode = currNode; break; } } if(wishNode == null){ throw new RuntimeException(); } return wishNode; } }
测试代码
package com.simple.test; import java.lang.Thread.State; import java.util.Map; import org.junit.BeforeClass; import org.junit.Test; import com.simple.ThreadEntity; import com.simple.ThreadList; import com.support.SimpleParse; public class SimpleThreadCase { @BeforeClass public static void setUpBeforeClass() throws Exception { } //测试解析结果的代码 @Test public void testParseSimpleXML(){ ThreadList threadlist = new ThreadList(); threadlist.setThreadlist(SimpleParse.parseSimpleXML()); StringBuilder builder = new StringBuilder(); builder.append("<threadlist>\r\n"); for(ThreadEntity te : threadlist.getThreadlist()){ builder.append("\t<threadins thread-id=\""+te.getThreadID()+"\">\r\n"); for(Map.Entry<Integer, ThreadEntity> entity : te.getPreEntities().entrySet()){ builder.append("\t\t<pre-threadID>" + entity.getKey() + "</pre-threadID>\r\n"); } builder.append("\t</threadins>\r\n"); } builder.append("</threadlist>"); System.out.println(builder.toString()); } //测试运行7线程的结果显示 @Test public void testThreadCase(){ ThreadList threadlist = new ThreadList(); threadlist.setThreadlist(SimpleParse.parseSimpleXML()); ThreadEntity target = getByID(threadlist, 7); runThread(target); } //运行7的算法 private void runThread(ThreadEntity te){ //如果没有准备好,先run pre的线程 while(!te.isReady()) { boolean Flag = true; for(Map.Entry<Integer, ThreadEntity> entry:te.getPreEntities().entrySet()){ ThreadEntity preEntity = entry.getValue(); Flag = preEntity.getState()==State.TERMINATED? (Flag && true):false; runThread(preEntity); } if(Flag){//preThread已经运行完毕 te.setReady(true); } } te.runProcess(); } private ThreadEntity getByID(ThreadList threadlist,int id){ ThreadEntity entity = null; for(ThreadEntity aentity : threadlist.getThreadlist()){ if(aentity.getThreadID() == id){ entity = aentity; break; } } if(entity == null){ throw new RuntimeException("can not found the EntityID" + id + ",in the threadList"); } return entity; } }
运行结果,testThreadCase 的结果
this ThreadEntity ID:1 this ThreadEntity ID:2 this ThreadEntity ID:3 this ThreadEntity ID:4 this ThreadEntity ID:5 this ThreadEntity ID:6 this ThreadEntity ID:7
发表评论
-
关于Java String 的 offset 问题。
2013-04-12 22:12 2442今天写了一段代码,大致如下文所示, Pattern p ... -
scala - turorial RetryTemplate
2013-03-23 23:17 1190在公司里面用java实现了一个RetryTemplate的模板 ... -
Module implement.
2013-03-10 21:36 0public interface Module { ... -
liferay 的介绍
2012-12-09 21:18 1199liferay到底是什么? liferay是一个迅速支持快速开 ... -
学习tomcat源代码
2011-10-06 22:56 1851国庆节一直在屋里闲着没事,看看了中文版的how tomcat ... -
查找Annotation class的遍历
2011-06-10 18:34 1693当我们使用自己定义的annotation,怎么才能获得使用an ... -
<h:dataTable/> <h:commandLink/> 的一种解决方案
2011-05-29 21:11 4065当我们使用<h:dataTable/ ... -
JSF AJAX 的理解
2011-05-22 14:08 8544关于access backing bean的用 ... -
java 多线程的一个例子二
2011-05-17 15:59 1569前文实现的是通过一个主进程进行轮训的方式,这篇文章是采用的是线 ... -
java类的加载顺序
2011-03-26 21:40 5918一个java类的加载顺序,今天做了一个实验,结果如下 ... -
actionListener 和一些ajax的理解
2010-05-19 16:21 1332对于actionListener我理解的就不是太多了 我的角度 ... -
关于代理模式的一些小的例子
2010-05-01 23:27 1108代理的方法是有两种 一种是静态的代理方法 还有一种是动态的代 ... -
EJB(一)
2010-04-05 21:03 1983昨天开始接触的EJB 按照视频上的讲解很快就学会了一个例子he ... -
JavaMail 学习(一)
2010-03-30 18:37 570编了一个教程里面的最简单的例子,但是显示发送成功但是收邮件的时 ... -
总结1
2009-12-13 18:54 686这一段时间本来是说看完jsp了,最后发现jsp里的例子全是 ... -
感想
2009-10-26 18:58 905一直以来我根本就不知道所谓的高手和我们之间的差距,今天算是知道 ...
相关推荐
很简单的一个java多线程例子,希望多大家有帮助
Java 多线程例子 Java 多线程是 Java 编程语言中的一种基本概念,它允许程序同时执行多个任务,从而提高程序的性能和效率。本文将通过三个实用的例子,讲解 Java 多线程的基本概念和使用方法。 第一个例子:创建多...
根据提供的文件信息,我们可以归纳出以下关于Java多线程的经典示例中的关键知识点: ### Java多线程实现方式 在Java中,实现多线程有两种主要的方法:通过继承`Thread`类或者实现`Runnable`接口。 #### 继承...
在Java多线程编程中,理解如何创建和...总的来说,这个例子展示了Java多线程的基本操作,包括创建、启动、管理和通信。理解和掌握这些概念对于进行并发编程是至关重要的,可以帮助开发者构建高效、稳定的多线程应用。
在给定的代码示例中,我们首先看到的是一个简单的Java多线程应用实例。这个例子展示了如何创建并启动一个新的线程。在`ThreadDemo`类的`main`方法中,我们创建了一个名为`TestThread`的新线程,并调用了它的`start()...
在Java编程中,多线程是一项关键特性,...总之,这个"JAVA多线程的一个带UI界面的例子"涵盖了Java多线程编程和GUI设计的核心概念,通过实际的代码示例,有助于开发者深入理解如何在实际应用中正确、高效地使用多线程。
这个名为"Java多线程的小例子——吃包子"的示例,旨在帮助开发者直观地理解多线程的工作原理。下面我们将深入探讨该示例所涉及的核心知识点。 首先,多线程通常涉及到以下几个关键概念: 1. **线程(Thread)**:...
Java多线程是Java编程中的重要概念,它允许程序同时执行多个任务,极大地提升了程序的效率和性能。在Java中,实现多线程有两种主要方式:通过实现Runnable接口或者继承Thread类。本案例将深入探讨Java多线程中的关键...
Java多线程是Java编程中一个重要的概念,它允许程序同时执行多个任务,提高了程序的效率和响应速度。在Java中,可以通过继承`Thread`类或实现`Runnable`接口来创建多线程。在这个例子中,我们将探讨如何通过自定义...
### Java多线程编程详解与实战案例 #### 理解多线程概念与Java内存模型 多线程,作为现代编程中的一项关键技术,允许在单一应用程序中并发执行多个指令流,每个这样的指令流被称为一个线程。在Java中,线程被视为...
总的来说,Java多线程提供了丰富的功能,包括线程的创建、启动、中断、同步以及异常处理等。通过合理利用这些工具,开发者可以构建出高效、稳定且响应迅速的多线程应用程序。在实际编程中,要特别注意线程安全和性能...
5. **线程优先级**:每个线程都有一个优先级,Java中从1(`MIN_PRIORITY`)到10(`MAX_PRIORITY`),默认优先级是5(`NORM_PRIORITY`)。但优先级并不保证线程的执行顺序,它只是影响调度策略。 6. **线程池**:`...
### JAVA中的单线程与多线程概念解析 #### 单线程的理解 在Java编程环境中,单线程指的是程序执行过程中只有一个线程在运行。这意味着任何时刻只能执行一个任务,上一个任务完成后才会进行下一个任务。单线程模型...
总之,Java多线程和异步调用是构建高效、响应迅速的应用程序的关键技术。通过合理利用这些工具和机制,开发者可以编写出能够充分利用多核处理器优势的代码,从而提高软件性能。在实际应用中,理解并熟练掌握这些概念...
在Java编程语言中,多线程是核心特性之一,它允许程序同时执行多个任务,从而提高了应用程序的效率和响应...文档“java多线程实例.docx”可能包含具体的示例代码和详细解释,建议参考学习,以加深对Java多线程的理解。
Java 多线程访问的经典例子,一个个代码 手动敲出,可以加深或理解 多线程访问 线程安全与同步的问题.
一个线程从A表读数据放入队列 N个线程从队列中取出数据,找到其在子表中的数据 对子表中的数据开3种线程:读,发email,标记状态 N个线程对完成的A表数据做最后处理 支持大数据量跑批,就是个例子,本来是公司发送...
现在,让我们来看一个简单的订票系统的Java多线程示例。假设我们有一个票务系统,其中的`TicketService`类包含一个`tickets`变量表示剩余票数: ```java public class TicketService { private int tickets = 100;...
Java多线程是Java编程中的重要概念,它允许程序同时执行多个任务,提高了程序的效率和响应性。在Java中,实现多线程有两种主要方式:通过继承`Thread`类和实现`Runnable`接口。 1. 继承Thread类: 当你需要创建一...
Java多线程并发编程是Java开发中的重要领域,特别是在服务器端和高并发应用中不可或缺。`java.util.concurrent`包提供了丰富的工具类,帮助开发者更好地管理线程和优化并发性能。以下将详细介绍标题和描述中涉及的...