随笔分类 -  java

摘要:同步装置 JDK5.0后提供了一个新的多线程并发控制的装置/工具,它允许一组线程互相进行协调运行。先引用IBM网站的一个表格:Semaphore一个经典的并发工具(计数信号量)。通常用于限制可以访问某些资源(物理或逻辑的)的线程数目。CountDownLatch同步辅助类,在完成一组正在其他线程中执行的操作之前,允许一个或多个线程一直等待。用于在保持给定数目的信号、事件或条件前阻塞执行。CyclicBarrier同步辅助类,是一个可重置的多路同步点,在某些并行编程风格中很有用。Exchanger允许两个线程在 collection 点交换对象,它在多流水线设计中是有用的。1.信号量 Semap 阅读全文
posted @ 2013-09-30 21:35 Jevo 阅读(224) 评论(0) 推荐(0)
摘要:Java多线程总结 有几天未写博客了,虽然在网络上一搜Java多线程主题有许多的结果,而且有许多深入讲解Java多线程的文章,仍想自己简单总结一下多线程。 线程的生命周期是指从线程创建、运行到消亡的整个过程。线程的状态可以表明线程处于生命周期具体那一阶段。线程的状态包括:创建、就绪、运行、阻塞、死亡五个状态。 线程状态间的转化,引用一张网上的图来说明:Java多线程基本概念 Java多线程的编程主要通过几个基础类来完成的:Thread、Runnable、Object对象的wait()、notify()、notifyAll()方法、synchronized关键字以及Java 5.0后引入的一些多 阅读全文
posted @ 2013-09-29 14:06 Jevo 阅读(778) 评论(0) 推荐(0)
摘要:XML文档结构 一个XML文档结构由根元素、元素、元素属性、文本组成,引用w3school上的一张图和说明:上图表示下面的 XML 中的一本书: ---- XML声明 ---- 根元素 ---- 为元素、元素属性 category、文本 Harry Potter,包括 4个子元素:title、author、year、price Harry Potter ----- 为元素、Harry Potter为文本内容 J K. Rowling 2005 29.99 Learning XML Erik T. Ray 2003 39.95 Everyday Italian Giada De Lau... 阅读全文
posted @ 2013-09-27 20:13 Jevo 阅读(589) 评论(0) 推荐(0)
摘要:前面讲述了通过自定义ClassLoader来实现Class的热替换,这里还可以通过动态修改内存中的字节码,将修改过的class再次装载到JVM中。实现动态修改内存中的字节码主要借助Java的Instrumentation特性来实现的。Instrumentation 是 Java SE 5 的新特性,它把 Java 的 instrument 功能从本地代码中解放出来,使之可以用 Java 代码的方式解决问题。使用 Instrumentation,开发者可以构建一个独立于应用程序的代理程序(Agent),用来监测和协助运行在 JVM 上的程序,甚至能够替换和修改某些类的定义。在 Java SE 6 阅读全文
posted @ 2013-04-23 23:10 Jevo 阅读(1494) 评论(0) 推荐(0)
摘要:前面有提到过Tomcat的热部署,所谓热部署就是在应用运行时更新Java类文件以升级软件功能,升级过程不需要关停和重启应用。要进行热部署需要做class热替换。Class热替换实现了将修改的class再次加载到JVM中,以动态替换内存中原有的class字节码。实现class的热替换就与Java类加载过程相关,关于Java类加载过程的文章或书籍早些年就已经很多了,这里从” 深入探讨 Java 类加载器(http://www.ibm.com/developerworks/cn/java/j-lo-classloader/)’’一文中摘录了部分内容说明Java类的加载过程。类加载器基本概念基本上所有 阅读全文
posted @ 2013-04-22 22:49 Jevo 阅读(3925) 评论(0) 推荐(1)
摘要:在长期的Java客户端开发过程中,一个常用的机制就是消息传送。无论是同步消息传送还是异步消息传送,应该说是建立在Observer设计模式基础上的。在Java中提供了基于这种模式的Observable/Observer事件框架,分别由java.util.Observable类和java.util.Observer接口组成,其中,Observer是观察者角色,Observable是被观察目标(subject)角色。我们先简单的看一下这两个类(接口):Observable是一个封装了基本功能的类,比如注册observer(attach功能),注销observer(detatch功能)等。我们一般只需 阅读全文
posted @ 2013-04-12 23:04 Jevo 阅读(11218) 评论(0) 推荐(1)
摘要:在长期的Java客户端开发中,最常见的一个客户端调用模式就是Java的异步调用。所谓异步调用其实就是实现一个可无需等待被调用函数的返回值而让操作继续运行的方法。在Java语言中,简单的讲就是另启一个线程来完成调用中的部分计算,使调用继续运行或返回,而不需要等待计算结果。但调用者仍需要取线程的计算结果。虽然在1.5以前从异步线程中取得返回结果需要自己精心设计,但从JDK1.5开始引入了Future接口(FutureTask类)从异步执行的线程中取得返回值。Future 表示异步计算的结果,它提供了检查计算是否完成的方法,以等待计算的完成,并获取计算的结果。FutureTask类是Future接口 阅读全文
posted @ 2013-04-11 23:05 Jevo 阅读(29769) 评论(0) 推荐(2)
摘要:这里主要总结Java中集成Groovy的应用。Groovy可以与Java完美集成来扩展我们的应用,比如替代Java+jexl实现算式表达式计算或其它功能。在Ofbiz中也集成了Groovy来执行一些查询功能,并且是开始更多的使用Groovy而不是原有的bsh。这里仅仅初步总结我们在Java项目中如何来应用Groovy扩展我们的应用。1.使用GroovyShell计算表达式使用Binding对象将变量传入表达式,并通过GroovyShell返回表达式的计算结果。如下例:public class GroovyShellExample { public static void main(String 阅读全文
posted @ 2013-04-08 13:46 Jevo 阅读(11479) 评论(1) 推荐(0)
摘要:JDK5.0开始引进了java Enum枚举类型,它可作为我们在编写代码时的一个技巧,有时恰恰因为它,我们能够"优雅而干净"地解决问题。在使用枚举类型时,我们所编写的枚举类都是隐式地继承于java.lang.Enum类,枚举类的每个成员都被隐式声明为public static final,可以通过类名称直接使用它们。由于枚举类型本质上就是一个类,所以可以在一个独立的文件中来声明枚举值,或者在某个类中声明枚举成员。要定义枚举类型是使用enum关键词。下面就枚举的用法作一个小结:用法一:提供常量、可用于Switch中这是它的最基本的用法,把相关的常量定义到一个枚举类型里。用法二 阅读全文
posted @ 2013-04-03 23:12 Jevo 阅读(347) 评论(0) 推荐(0)
摘要:曾经在一个项目中使用表达式来判断处理一些条件,比如订单价格的折扣计算,库存数量的告警线设置等。我们引入了Jexl(一种表达式语言引擎)来处理这些表达式。这里根据几个例子来总结一下它的应用。例一、算式表达式的处理:public class jextTest { public static void main(String[] args) { //数学公式解析和计算 String expression = "(a+b)/c*5"; JexlContext jexlContext = new MapContext(); jexlContext.set("a", 阅读全文
posted @ 2013-04-01 23:38 Jevo 阅读(1912) 评论(0) 推荐(0)
摘要:Annotation(注解)是JDK5.0版本开始引入的,是附加在代码中的一些元信息,用于一些工具在编译、运行时进行解析和使用,起到说明、配置的功能。注解不会直接影响到程序的语义,只是作为注解(标识)存在,可以通过反射机制编程实现对这些元数据的访问。在Java开发过程中,我们过去比较常见的方式是将软件的各种配置参数存贮在XML文件中,程序运行时从XML配置文件中读取出各配置参数进行运行时环境配置。这个方式使用程序运行灵活的同时也带来一个问题:就是XML配置文件越来越多,不易管理。注解引进后,减少配置、使用注解替代部分XML配置慢慢变成一种趋势。从某种角度来讲,注解具有XML配置的功能,它可有不 阅读全文
posted @ 2013-03-27 22:57 Jevo 阅读(310) 评论(0) 推荐(0)