`
五月天
  • 浏览: 21134 次
  • 性别: Icon_minigender_1
  • 来自: 广州
社区版块
存档分类
最新评论
文章列表
在分析线上问题时常使用到jstack <PID>命令将当时Java应用程序的线程堆栈dump出来。面对jstack 日志,我们如何查看?   首先要清楚线程的状态线程的状态有:new、runnable、running、waiting、timed_waiting、blocked、dead线程状态变迁图:     各状态说明:New: 当线程对象创建时存在的状态,此时线程不可能执行;Runnable:当调用thread.start()后,线程变成为Runnable状态。只要得到CPU,就可以执行;Running:线程正在执行;Waiting:执行thread.join( ...
大家知道,spring依赖注入可以通过xml和annotation两种方式实现,还提供了自动扫描类的功能,这样大大简化了开发。今天也闲着没事,也实现了类似的功能。废话少说,直接上码: 先说明下要使用到的jar包:dom4j.jar和jaxen.jar(读取配置文件),junit.jar(单位测试),log4j.jar和commons-logging.jar(日志记录)。 1,类似spring的@Service注解 /** * 自动扫描类到容器中 * @author zcl * */ @Target(ElementType.TYPE) @Retention(Retent ...
在jbpm4中,必须给任务分配参与者(assignee),我总结了下,有以下的几种方法 一,直接在jpdl.xml文件中指明参与者,如: <task name="review" g="280,146,92,52" assignee="zcl"> <transition name="to wait" to="wait" g="-25,-25"/> </task>  这样在程序中就可以直接使用zcl作为用户的id了。 ...
/** * 折半查找 * author: zcl */ public class BinarySearch { public static int search(int[] arrays, int target) { int start = 0; int end = arrays.length - 1; int pos; while (start <= end) { pos = (start + end) / 2; if (arrays[pos] == target) { return pos; } e ...
** * 实现的简单链表 * @author zcl * */ public class LinkedList { public class Node { private String nodeName; private Node next; public Node(String name) { nodeName = name; } public Node(String name, Node next) { this(name); this.next = next; } / ...
策略模式是针对一组算法,将每一个算法封装到具有共同接口的独立的类中,从而使得它们可以相互替换。策略模式使得算法可以在不影响到客户端的情况下发生变化。 策略模式的类图:     抽象策略角色可以由java接口或抽象类实现,若有一些公有的行为,则应该使用抽象类。抽象类应该的角色应该足够“重”。 下面举个例子来说明策略模式的用意和作用。 现在有个需求要对一组数据进行排序,但由于各种原因,排序的方法很多,效率也不同,实用的场合也不同,因此可以利用策略模式来实现,将算法封装到具体的类中,需要哪个算法直接到类传进去就可以了,相当于回调机制。 /** * 抽象策略 */ publi ...
大家都知道,要对一个对象进行排序可以利用java提供的Comparable<T>接口和Arrays工具类实现。 在实现Comparable<T>接口时要实现下面的方法 public int compareTo(T t);  此方法返回1,0和-1。返回1表示升序,-1表示降序。0表示相等。 为什么要这样定义?出于好奇,我查看了源代码,发现此方法是利用了数据结构里面的平衡二叉树的排序原理。 为了巩固以前学过的数据结构知识,我现在通过java来实现下Binary Tree. /** * 二叉树 */ public class BinaryTree< ...
PO :persistent object持久对象 1 .有时也被称为Data对象,对应数据库中的entity,可以简单认为一个PO对应数据库中的一条记录。 2 .在hibernate持久化框架中与insert/delet操作密切相关。 3 .PO中不应该包含任何对数据库的操作。 -------- ...
类加载器(class loader)用来加载 Java 字节码到 java虚拟机中,即类加载器负责读取 Java 字节代码,并转换成 java.lang.Class 类的一个实例。每个这样的实例用来表示一个 Java 类。 在java虚拟机中可以安装多个类加载器,系统默认三个主要类加载器: BookStrap,  ExtClassLoader,  AppClassLoader 类加载器也是java类,所以java类加载器本身也要被其它类加载器加载,显然必须有第一个类加载器不是java类,这正是BootStrap.     java虚拟机中所有的类装载器采用具有父子关系的树形 ...
InputStream,OutputStream,Reader,Writer    1. InputStream 和OutputStream,两个是为字节流设计的,主要用来处理字节或二进制对象,    2. Reader和 Writer.两个是为字符流(一个字符占两个字节)设计的,主要用来处理字符或字符串.    字符流处 ...
抽象工厂模式可以向客户端提供一个接口,使得客户端在不必指定产品的具体类型的情况下,创建多个产品族的产品对象。 类图如下:   一个例子:由于业务需求,我公司引进了一个使用机器绘图,可以很方便绘制不同的几何形状,如圆形,方形和三角形。但是有时还得需要手动绘图,每个几何图形都要有画图draw()和擦去erase()两个方法,请使用抽象工厂来解决此问题 先实现定义抽象产品 public interface Shape { public void draw(); public void erase(); } public interface Circle e ...
工厂方法模式是是简单工厂的进一步抽象和推广。由于使用了多态,工厂方法保持了简单工厂模式的优点,而且克服了它的缺点。 工厂方法模式的类图: 在一个真实的系统中,会有多于一个的产品等级结构,此时可以将工厂方法应用到这个系统中,按照产品等级结构设计一个同结构的工厂等级结构。 一个例子:请使用工厂方法设计创建一个不同几何形状,如圆形,方形和三角形实例的描图员(Art Tracer),针对于圆形有圆形的描图员,对于方形有方形的描图员。。。系统。每个几何图形都要有画图draw()和擦去erase()两个方法 抽象产品: /** * 抽象出来的工厂类 */ public interfa ...
简单工厂模式,或称静态工厂方法模式,是类的创建模式,由一个工厂对象决定创建出哪一种产品类的实例。 一个例子,要求设计一个创建不同几何形状,如圆形,方形和三角形实例的描图员系统。每个几何图形要有画出draw()和擦去erase()两个方法。 类图如下:  Shape接口 public interface Shape { //画图形 public void draw(); //擦去 public void erase(); }  几个具体实现类: public class Circle implements Shape { @Override ...
Global site tag (gtag.js) - Google Analytics