Java
文章平均质量分 71
eclipser1987
这个作者很懒,什么都没留下…
展开
-
编写maven插件。
网上有很多关于maven插件编写的内容,这里我还是以我的方式,大部分代码形式来阐述。<project xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd" xmlns="http://maven.apache.org/POM/4.0.0"原创 2013-09-17 10:16:21 · 2408 阅读 · 0 评论 -
volatile关键字
可参见文章:http://www.ibm.com/developerworks/cn/java/j-jtp06197.html package cn.vicky;public class MyTest { int i = 0; public void repaint(){ System.out.println(" ------- " + Thread.curr原创 2010-05-10 11:20:00 · 677 阅读 · 0 评论 -
java.util.concurrent我的理解
在Java类库中出现的第一个关联的集合类是 Hashtable ,它是JDK 1.0的一部分。Hashtable 提供了一种易于使用的、线程安全的、关联的map功能,这当然也是方便的。然而,线程安全性是凭代价换来的――Hashtable 的所有方法都是同步的。此时,无竞争的同步会导致可观的性能代价。Hashtable 的后继者HashMap 是作为JDK1.2中的集合框架的一部分出原创 2012-02-28 12:02:22 · 2987 阅读 · 0 评论 -
java.util.concurrent.CopyOnWriteArrayList CopyOnWriteArraySet
CopyOnWriteArrayList 一、简介 JDK5中添加了新的concurrent包,其中包含了很多并发容器,这些容器针对多线程环境进行了优化,大大提高了容器类在并发环境下的执行效率。 CopyOnWriteArrayList类是一个线程安全的List接口的实现,在该类的内部进行元素的写操作时,底层的数组将被完整的复制,这对于读操作远远多于写操作的应用非常适合。在转载 2012-02-28 11:19:26 · 5529 阅读 · 1 评论 -
java.util.concurrent.BlockingQueue ArrayBlockingQueue
一、简介 BlockingQueue接口定义了一种阻塞的FIFO queue,每一个BlockingQueue都有一个容量,让容量满时往BlockingQueue中添加数据时会造成阻塞,当容量为空时取元素操作会阻塞。ArrayBlockingQueue是对BlockingQueue的一个数组实现,它使用一把全局的锁并行对queue的读写操作,同时使用两个Condition阻塞容量为空时的转载 2012-02-28 11:35:09 · 1485 阅读 · 0 评论 -
ReentrantLock
synchronized原语和ReentrantLock在一般情况下没有什么区别,但是在非常复杂的同步应用中,请考虑使用ReentrantLock,特别是遇到下面2种需求的时候。1.某个线程在等待一个锁的控制权的这段时间需要中断 2.需要分开处理一些wait-notify,ReentrantLock里面的Condition应用,能够控制notify哪个线程 3.具有公平锁功能,每个转载 2012-02-28 13:44:43 · 17968 阅读 · 2 评论 -
精通JAVA的25个标准
1.你需要精通面向对象分析与设计(OOA/OOD)、涉及模式(GOF,J2EEDP)以及综合模式。你应该了解UML,尤其是class,object,interaction以 及statediagrams。 什么是OOA/OODObject Oriented Analyzing Object Oriented Design Object Oriented Programmingo转载 2012-02-20 10:24:43 · 4344 阅读 · 0 评论 -
Java对象以Blob存储,及序列化反序列化 (3)
在完成之前2篇文章内容之后,我们讨论下以下情况。项目要改版,TUser或者User要修改属性,添加或者删除某些字段,那么数据库已保存的数据还能被反序列化为原有对象,并进行扩展么?修改User.javapackage cn.vicky.po.vo;import java.io.Serializable;/** * * @author Vicky.H */p原创 2012-02-14 11:39:39 · 3346 阅读 · 0 评论 -
ThreadLocal的实现原理,及使用实例,解决spring,hibernate非web项目下的懒加载 no session or session was closed(1)!
JDK 1.2的版本中就提供java.lang.ThreadLocal,ThreadLocal为解决多线程程序的局部变量独立问题... 查看API我们可以查看ThreadLocal的定义与方法: 该类提供了线程局部 (thread-local) 变量。这些变量不同于它们的普通对应物,因为访问某个变量(通过其 get 或 set 方法)的每个线程都有自己的局部变量,它独立于变量的初始原创 2010-01-29 09:58:00 · 4967 阅读 · 0 评论 -
再谈Java序列化
package cn.vicky.chapt01;import java.io.File;import java.io.FileInputStream;import java.io.FileOutputStream;import java.io.ObjectInputStream;import java.io.ObjectOutputStream;/** *原创 2012-02-20 15:40:35 · 666 阅读 · 0 评论 -
java.util.concurrent.ConcurrentHashMap
一、简介 ConcurrentHashMap是Map的一种并发实现,在该类中元素的read操作都是无锁了,而write操作需要被同步。这非常适合于读操作远大于写操作的情况。在实现过程中,ConcurrentHashMap将所有元素分成了若干个segment,每个segment是独立的,在一个segment上加锁并不影响其他segment的操作。segment本身是一个hashtable,转载 2012-02-28 11:48:33 · 12086 阅读 · 1 评论 -
java.util.concurrent.LinkedBlockingQueue
一、简介 LinkedBlockingQueue是BlockingQueue的一种使用Link List的实现,它对头和尾(取和添加操作)采用两把不同的锁,相对于ArrayBlockingQueue提高了吞吐量。它也是一种阻塞型的容器,适合于实现“消费者生产者”模式。二、具体实现 LinkedBlockingQueue底层的定义如下:public class Linke转载 2012-02-28 11:40:22 · 5136 阅读 · 0 评论 -
Java对象以Blob存储,及序列化反序列化 (2)
在上一节讲述了如何根据JAVA实体类的大小,选择对应的blob格式,现在我们将以一个简单的例子完整的讲述如何将Java对象一Blob格式存储数据库。修改TUser.java package cn.vicky.po;import cn.vicky.po.vo.User;import java.io.Serializable;import javax.persiste原创 2012-02-14 11:18:34 · 4254 阅读 · 0 评论 -
Java对象以Blob存储,及序列化反序列化 (1)
序列化,反序列化的概念此处不叙述,我们这里选要讨论的是,如何使用JPA规范实现JAVA对象以Blob个数存储数据库并且,在修改JAVA类的属性后,任然能从数据库中反序列化对象,这也是使用JAVA作为游戏服务器常用的数据存储方式以及要面对的问题。 这里我们将完全以实例放方式讲述:首先,我们需要一个t_user的表,id 以及blob类型的user数据。 MySQL的四种BLOB类原创 2012-02-14 11:06:36 · 6278 阅读 · 0 评论 -
使用Java来处理C++存储在数据库中的Blob数据。
面对这个问题的原因其实很简单,游戏项目,服务器采用C++开发,用户数据以二进制数据保存在mysql中,对应数据类型为Blob。现在,公司想要通过web查看到这些玩家的数据,顾,需要读取mysql,玩家的二进制数据包,进行拆分,这样不仅面对Java对Blob数据的处理,还要进行Java与C++数据的转换。 公有类:package cn.vicky.utils;import j原创 2011-11-25 11:58:27 · 1261 阅读 · 0 评论 -
jni实例二
本想自己写有关的文章,但发现,网络上已经有不错的实例了,在此推荐:http://baishaobin2003.blog.163.com/blog/static/57381812201062393753827/原创 2011-10-27 19:38:22 · 604 阅读 · 0 评论 -
Java核心类库之collections
1. 描述:1.1 概述java.util.Collections类包含很多有用的方法,可以使程序员的工作变得更加容易,但是这些方法通常都没有被充分地利用。Javadoc给出Collections类最完整的描述:“这一个类包含可以操作或返回集合的专用静态类。” 1.2 所含方法Iterator, ArrayList, Elements, Buffer, Map,Collection原创 2012-02-20 11:39:50 · 2346 阅读 · 0 评论 -
java获取路径
1、利用System.getProperty()函数获取当前路径:System.out.println(System.getProperty("user.dir"));//user.dir指定了当前的路径2、使用File提供的函数获取当前路径:File directory = new File("");//设定为当前文件夹try{ System.out.println(d转载 2012-02-20 16:29:50 · 580 阅读 · 0 评论 -
Object,byte[],ByteBuffer之间的转换。
新版本package cn.vicky.chapt13;import java.io.ByteArrayInputStream;import java.io.ByteArrayOutputStream;import java.io.IOException;import java.io.InputStream;import java.io.ObjectInputStrea原创 2010-03-05 16:55:00 · 19017 阅读 · 1 评论 -
解决线程安全的另一种思路
/* * To change this template, choose Tools | Templates * and open the template in the editor. */package tmp;import java.util.ArrayList;import java.util.List;/** * * @author Vicky.H * @emai原创 2013-09-13 10:19:57 · 817 阅读 · 0 评论 -
Java简单实现固定长度队列(FIFO)
/* * To change this template, choose Tools | Templates * and open the template in the editor. */package linkedlisttest;import java.util.LinkedList;/** * * @author Vicky.H * @email eclipser原创 2013-08-28 13:07:53 · 281808 阅读 · 0 评论 -
java加密工具类
package cn.vicky.utils;import java.security.MessageDigest;public class MD5 {// private final static String[] hexDigits = { "0", "1", "2", "3", "4", "5",// "6", "7", "8", "9", "a", "b", "原创 2013-01-09 14:26:23 · 1676 阅读 · 0 评论 -
google protocol buffer 与 redis 结合使用
google protocol buffer 可以将对象序列化,而redis作为优秀的NOSQL数据库,这里我将以实例方式介绍,将C++对象序列化,并存放在redis数据库中! google protocol buffer 的安装以及基础使用可以阅读我上一片文章.redis的安装使用,可以查阅,这里不再描述.我使用redis的官方C client: hiredis. proto原创 2013-01-23 16:27:29 · 11942 阅读 · 0 评论 -
ClassLoader,URLClassLoader,类的动态加载!
实例svn:svn://www.oksvn.com/classloader/ClassLoadersvn://www.oksvn.com/classloader/ClassLoaderWeb 尤其,通过URLClassLoader,在配合如J2EE等方式,项目JMX管理,那么实现项目的动态修改十分方便,比如,Mina中的Filter,我们可以非常灵活的增加,修改,更新,删除Filt原创 2012-07-30 11:58:23 · 3125 阅读 · 0 评论 -
使用mina2框架编写分布式日志服务器
日志服务器,那游戏服务器为实例,重要的数据库服务器,游戏服务器,网关服务器...往往不在意日志服务器,而通常情况下,日志简单的通过log4j,c下的log4c,cpp下的log4cpp等日志工具,当然,这类日志工具是主流的开源框架,性能,功能面都不错,但如果,我们需要记录几乎每个玩家,没个操作,那么这类在应用程序中添加的日志记录将会消耗大量系统资源,导致服务器卡慢.顾,分布式日志服务器在某些项目架原创 2012-08-03 10:00:55 · 3559 阅读 · 0 评论 -
netty 下载地址
中国的防火墙一向是强大的.jboss netty 网站也在屏蔽之列http://www.jboss.org/netty/下载可以进入下面网址https://github.com/netty/netty/downloads原创 2012-07-17 11:34:17 · 1105 阅读 · 0 评论 -
Java远程调试.使用IDE netbeans
上一篇文章,主要讲述的是c程序中fork()子进程的调试,其核心思想无外乎是远程调试的一部分.这里我将讲述,java的远程调试. 参见,小石头的文章:http://www.blogjava.net/yongbing/articles/221179.html 主要讲述要调试的java程序运行参数.首先,JAVA自身支持调试功能,并提供了一个简单的调试工具--JDB,类似于功能强大的GDB原创 2012-06-29 17:44:43 · 3337 阅读 · 0 评论 -
关于cmwap的代理
在中国移动提供的网络连接中,分为CMNET和CMWAP两种,其中CMNET可以无限制的访问互联网络,资费比较贵。CMWAP类似一个HTTP的代码,只能访问支持HTTP的应用,但是资费便宜,稳定性比较差。 在实际的J2ME网络编程中,一般需要提供以CMWAP代理的方式连接网络,在J2ME中,连接的代码和直接连接有所不同,代码如下: HttpConnect原创 2012-05-15 09:21:04 · 810 阅读 · 0 评论 -
分布式服务器,session的管理。
拿游戏服务器为例,每个session代表一个用户连接,常规方案中,对于世界聊天以及私聊等工作,都普遍采用遍历session集合方式,发送或者查找对应玩家的方式实现,严格意义上,其效率及对服务器性能形象并不大,但,考虑到量级以及分布式查询等,这种完全依靠遍历的方式并不合适。以下面例子为实例对比传统遍历方式以及分层存储在存储,查询效率及性能上的对比。 package t;impor原创 2012-03-22 14:40:46 · 3526 阅读 · 0 评论 -
同步类
package t;/** * * @author Vicky.H */public final class Mina2 { public static long checkerSleepMillis = 1000; public static void reloadResource() throws InterruptedException原创 2012-03-21 13:32:02 · 649 阅读 · 0 评论 -
如何避免使用try catch语句块,及性能分析
那mina中的一个例子为例:@Override public void filterWrite(NextFilter nextFilter, IoSession session, WriteRequest writeRequest) throws Exception { Object data = writeRequest.getMes原创 2012-03-21 10:41:04 · 1965 阅读 · 1 评论 -
打包含有多个main程序的jar包运行方式
一个项目中,往往主程序不只一个。打包jar时,一般需要指定主程序。拿maven来说,配置主程序的方式如下: pox.xml中 org.apache.maven.plugins maven-shade-plugin原创 2012-03-14 18:17:13 · 13538 阅读 · 1 评论 -
final修饰函数在性能上提高的测试。
无意间看到一篇文章其中说到:final 修饰函数可以提升性能于是我找到这种提升性能的2种解释:其一:final方法: 当一个方法用“final”来修饰时,表示该方法不可以被子类重写。 使用final方法的原因有二: 一、限制了子类中对其改写; 二、提高了执行的效率,因为这种情况属于静态绑定,Java虚拟机(JVM)的即时编译器就不会去检索该方法在其父类、子类或爷爷类原创 2012-03-09 14:11:12 · 2632 阅读 · 1 评论 -
JAVA NIO 实例
我们都知道TCP是面向连接的传输层协议,一个socket必定会有绑定一个连接,在普通的BIO(阻塞式IO)中,需要有三次握手,然后一般的socket编程就是这样的形式。Socket服务器端流程如下:加载套接字->创建监听的套接字->绑定套接字->监听套接字->处理客户端相关请求。 Socket客户端同样需要先加载套接字,然后创建套接字,不过之后不用绑定和监听了,而是直接连接服务器,发送相关转载 2012-03-07 16:12:30 · 14338 阅读 · 3 评论 -
JAVA 垃圾回收机制原理
这里,我不用什么理论方式讲述垃圾回收机制原理.我只通过2个简单的程序,探讨我对Java 垃圾回收机制的理解.毕竟很多东西,理论的术语可能没有直观的测试更好. package cn.vicky.chapt14;/** * * @author Vicky.H */public class FinalizeTest { public static原创 2012-03-03 16:18:09 · 4928 阅读 · 0 评论 -
jni实例一
1。编写一个java程序,包含一个native函数。 package cn.vicky.jni;/** * * @author Vicky.H */public class HelloWorld { // 1.need a native method public native void sayHello(); }2原创 2011-10-27 13:26:19 · 1028 阅读 · 0 评论 -
Java、Js判断全角半角
JS判断全角半角: function chkHalf(str){ for(var i=0;i<str.length;i++) { strCode=str.charCodeAt(i);转载 2011-10-17 11:12:06 · 1698 阅读 · 0 评论 -
实现AMF3与Java之间数组的传递(动态创建数组)...
首先,AMF3似乎并不支持List.ArrayList等数组的解析...Java客户端传递List对象,AMF3无法解析为Array...原因是:AMF3只支持基础数据类型...故,需要将List等数据转换为Object[] !这样AMF3才能将Java传递的数组解析为Array...由于数组的创建,即便一开始不赋值,也需要设置数组的length,如:String[] myString原创 2010-01-11 16:14:00 · 3870 阅读 · 1 评论 -
ArrayList的实现与System.arraycopy的使用!
public class ArrayList { private Object[] objects = new Object[10]; private int index = 0; public void add(Object obj) { if (index >= objects.length) { Object[] newObjects = new O原创 2010-01-10 10:31:00 · 2282 阅读 · 0 评论 -
java.security.MessageDigest的使用(2),生成安全令牌!
时候,我们需要产生一个数据,这个数据保存了用户的信息,但加密后仍然有可能被人使用,即便他人不确切的了解详细信息...好比,我们在上网的时候,很多网页都会有一个信息,是否保存登录信息,以便下次可以直接登录而不必再次输入账户,密码等...而通常这样需要Cookie保存用户信息,当然,这个信息是加密信息,且一般都加了时间戳等验证信息的... 登陆时,读取cookie,解析cook原创 2010-01-08 15:55:00 · 15490 阅读 · 1 评论