Java
文章平均质量分 58
xuefeng0707
这个作者很懒,什么都没留下…
展开
-
Thread.join()笔记
首先看下javadoc的介绍https://docs.oracle.com/javase/8/docs/api/java/lang/Thread.html#join--https://docs.oracle.com/javase/8/docs/api/java/lang/Thread.html#join-long-https://docs.oracle.com/javase/8/docs/api/...原创 2018-06-01 19:51:33 · 852 阅读 · 0 评论 -
StringBuffer与StringBuilder区别
从JDK源码可以看出,StringBuffer和StringBuilder都是继承自AbstractStringBuilder,其实这两个类的功能实现都是在AbstractStringBuilder实现的,两个子类只是简单地调用了一下super的方法。差别在于StringBuffer的每个方法都加了synchronized修饰符,而StringBuilder没有,因此StringBuffer是原创 2014-11-02 22:57:37 · 1615 阅读 · 1 评论 -
Java的集合类
在Java的java.util包中,有一批类被称为集合类集合类,顾名思义,就是存放对象的集合的类,可以是数组形式【ArrayList】,也可以是链表形式【LinkedList】,也可以是两种形式结合【HashMap】。Java的集合类的父类是Collection接口,主要分为三大类:List、Map、Set。其中,List是一组元素的集合,最常用到的为ArrayList、LinkedL原创 2014-11-08 23:40:20 · 1675 阅读 · 0 评论 -
StringBuffer与StringBuilder的区别
二者区别,简而言之,在于StringBuffer内部实现了线程同步,而StringBuilder没有。二者均继承自AbstractStringBuilder。JDK源码中可以看得更清楚些。=============================从源码中可以看出,子类AbstractStringBuilder已经实现了所有的操作,String原创 2014-05-27 20:35:24 · 1165 阅读 · 0 评论 -
Java虚拟机 类加载的过程
转载请标明出处:http://blog.csdn.net/xuefeng0707/article/details/9132339类加载的全过程分为五个阶段:加载、验证、准备、解析、初始化。1. 加载这个阶段可分为三段:(1)加载二进制字节流根据类的全限定名(包名+类名),获取此类的二进制字节流。虚拟机规范没有指定二进制字节流从哪里读取,可以是class文件,原创 2013-06-30 12:22:36 · 8857 阅读 · 0 评论 -
SHA算法简介
SHA:Secure Hash Algorithm安全散列算法与MD5算法极为相似。长度不超过2^64位的字符串或二进制流,经过SHA-1编码后,生成一个160位的二进制串。SHA-1算法也与MD5类似,都是把输入二进制串分成512位的块,把二进制串的位数存储在最后64位,二者之间填充为0,依次对每个块进行一些列高深的数学运算,最后得到一个160位的二进制串。原创 2014-02-27 23:37:22 · 15948 阅读 · 1 评论 -
MD5算法简介
MD5:Message Digest Algorithm 5信息摘要算法 第五版任意长度的字符串或字节流,经过MD5的编码后,生成一个128bit的二进制串。通常表示为32个十六进制数字连成的字符串。原创 2014-02-26 22:34:35 · 4512 阅读 · 1 评论 -
Java socket异常
使用Java socket编写程序时,通常会遇到几种种异常:BindException、UnknownHostException、ConnectException、SocketTimeoutException。BindException会发生在Socket或ServerSocket的bind()操作中,如果无法与本机指定的IP地址或端口绑定,就会抛出此异常。有两种情况:指定原创 2013-07-15 22:38:06 · 15751 阅读 · 0 评论 -
Eclipse插件EasyExplore 打开文件所在目录
EasyExplore的作用是:在Eclipse中,能够容易的打开任意文件或文件夹所在目录。 官方下载地址:http://nchc.dl.sourceforge.net/project/easystruts/Easy%20Explorer%20for%20Eclipse/easy-explore-1.0.4/org.sf.easyexplore_1.0.4.jar原创 2013-04-23 21:36:36 · 19803 阅读 · 2 评论 -
Tomcat源码解析1:Eclipse导入Tomcat源代码
本系列文章以Apache Tomcat 6.0.41为例。(1)下载Tomcat源代码:http://tomcat.apache.org/download-60.cgi,apache-tomcat-6.0.41-src.zip,解压缩。(2)在Eclipse里创建Java项目,命名为:apache-tomcat-6.0.41-src(3)把src从Build Path移除,然后原创 2014-11-19 22:48:09 · 4079 阅读 · 2 评论 -
HashMap与HashTable的区别
首先,从JDK源码来看,HashMap和HashTable都实现了Map接口:可以看出,HashTable是从JDK1.0就有的,HashMap而是从JDK1.2才有的。二者实现的接口一致。因此,对外方法API也基本一致:内部存储方式也基本一致,都是邻接表形式:基本操作也基本一致,以put方法为例,都是先算Key的hashCode,然后以【has原创 2014-11-03 23:03:26 · 1801 阅读 · 0 评论 -
HashMap多线程死循环问题
正如上篇文中所说,HashMap不是线程安全的,在被多线程共享操作时,会有问题,具体什么问题呢,一直没有个清晰的理解,今天写了个测试程序调了一下,才明白其中道理。主要是多线程同时put时,如果同时触发了rehash操作,会导致HashMap中的链表中出现循环节点,进而使得后面get的时候,会死循环。【关于什么是rehash,读者可以自行去google了】本文主要参考了:http://coo原创 2014-11-05 21:40:02 · 34135 阅读 · 14 评论 -
3个线程顺序打印数字
问题:启动3个线程A、B、C,使A打印0,然后B打印1,然后C打印2,A打印3,B打印4,C打印5,依次类推。思路:每个线程给定一个编号,每个线程判断当前是否已经轮到自己打印:如果没轮到,就wait等待;如果轮到,则打印当前数字,并唤醒其他线程。判断是否已经轮到自己打印:每个线程给定一个编号N,N从0开始;使用一个全局变量记录当前需要打印的数字C,C从0开始,每次打印之后加1;线程数量M;判断逻辑...原创 2018-05-31 23:48:58 · 4846 阅读 · 1 评论 -
curator分布式锁
curator是Netflix公司开源的一个ZooKeeper客户端封装。ZooKeeper可以被用来实现分布式锁,具体是使用“临时顺序节点”实现。获取锁一个分布式锁对应ZooKeeper的一个文件夹,每个需要获取这个分布式锁的客户端线程在这个文件夹下创建一个临时顺序节点,此时有两种情况:1)创建的临时顺序节点是文件夹下的第一个节点,则认为是获取分布式锁成功。2)创建的临时顺序节点不是文件夹下的第...原创 2018-06-06 00:21:22 · 8290 阅读 · 1 评论 -
ReentrantLock获取锁及释放锁流程
ReentrantLock特性:可重入、排它锁内部使用AQS(AbstractQueuedSynchronizer)实现,主要技术:CAS、park/unpark主要使用AQS的两个成员变量来实现可重入排它锁。可重入:AQS.state用于记录进入锁的次数。排它锁:AQS.exclusiveOwnerThread用户当前占有锁的线程。一个线程获取锁时,调用ReentrantLock.lock(),...原创 2018-05-24 23:17:21 · 2643 阅读 · 0 评论 -
ReentrantReadWriteLock获取锁及释放锁流程
ReentrantReadWriteLock:可重入读写锁ReentrantReadWriteLock lock = new ReentrantReadWriteLock();ReentrantReadWriteLock.ReadLock readLock = lock.readLock();ReentrantReadWriteLock.WriteLock writeLock = lock.w...原创 2018-05-25 00:14:02 · 1622 阅读 · 2 评论 -
关于Double.MIN_VALUE和Integer.MIN_VALUE
Integer.MIN_VALUE自不必说,就是32位整型能存储的最小数字:0x80000000,是一个负数。 但是Double.MIN_VALUE却是一个正数: 可以看到,Double.MIN_VALUE表示的时64位双精度值能表示的最小正数。如果需要用到Double的负无穷,可以用Double.NEGATIVE_INFINITY原创 2015-03-14 17:12:35 · 8261 阅读 · 0 评论 -
Eclipse创建maven项目时报错:maven-resources-plugin:2.5 or one of its dependencies could not be resolved
Eclipse创建maven简单项目时,报错:Could not calculate build plan: Plugin org.apache.maven.plugins:maven-resources-plugin:2.5 or one of its dependencies could not be resolved: Failed to read artifact descriptor f原创 2014-12-26 00:00:02 · 58797 阅读 · 23 评论 -
Vector,ArrayList,LinkedList,SynchronizedList
Vector,ArrayList,LinkedList,SynchronizedList原创 2014-11-06 23:49:29 · 3463 阅读 · 0 评论 -
HashMap与ConcurrentHashMap的区别
从JDK1.2起,就有了HashMap,正如前一篇文章所说,HashMap不是线程安全的,因此多线程操作时需要格外小心。在JDK1.5中,伟大的Doug Lea给我们带来了concurrent包,从此Map也有安全的了。ConcurrentHashMap具体是怎么实现线程安全的呢,肯定不可能是每个方法加synchronized,那样就变成了HashTable。从Conc原创 2014-11-05 22:49:15 · 295761 阅读 · 67 评论 -
Eclipse3.6 添加JUnit源代码
Eclipse中无法查看JUnit源代码,也无法设置源代码的jar。解决方法:1. 下载org.junit.source_4.8.1.v4_8_1_v20100427-1100.jar,放到eclipse\plugins下。2. 修改 eclipse\configuration\org.eclipse.equinox.source\source.info,添加一行:原创 2013-06-25 13:14:07 · 2964 阅读 · 0 评论 -
Java虚拟机 类初始化 阶段
Java虚拟机使用某个类的过程,可分为七个阶段:加载 - 验证 - 准备 - 解析 - 初始化 - 使用 - 卸载本文只介绍在什么情况下对类进行初始化。Java虚拟机规范对何时进行类的初始化做了严格规范,有且只有四种情况:1. 虚拟机启动时,指定的主类。 包含main方法的类。2. 遇到new、getstatic、putstatic、invokestatic四条原创 2013-06-10 18:37:39 · 1978 阅读 · 0 评论 -
JMX : MXBean
MXBean是一种MBean。只会引用有限的几种数据类型,predefined set of data types。如此,任何client都可以访问MXBean,包括远程client。client无需能访问到MXBean的attribute 的class。命名规范:接口 : XXXMXBean。或者用@MXBean注释,也可任意指定。实现类 : 任意。MXBean中原创 2012-08-25 21:14:29 · 3746 阅读 · 0 评论 -
Java多线程打印数字
问题:从0打印到99约束:有三个线程 A、B、C,其中A打印0~4,B打印5~9,C打印10~14,然后A打印15到19,B打印20~24,以此类推首先,写了一块代码,如下public class PrintThread extends Thread { private int id; private static Integer n = 0; public Pri原创 2012-05-16 22:22:21 · 3204 阅读 · 0 评论 -
Java模拟发送键盘消息 shift组合键
Java中可通过java.awt.Robot来模拟发送消息:键盘消息,鼠标消息之类的。先来试试Robot robot = new Robot();robot.keyPress(KeyEvent.VK_CONTROL);robot.keyPress(KeyEvent.VK_ALT);robot.keyPress(KeyEvent.VK_RIGHT);robot.keyRelease原创 2012-05-16 22:31:46 · 9573 阅读 · 2 评论 -
Java 解析 xml 之 DOM and SAX
Java解析XML有两种方式:**DOM**SAX例子: information of users LiLei 1 19 Han Meimei 0 18 DOM方式:载入XML,在内存中建立与xml文件相对应的DOM树。根据DOM树中的Node和NodeList,获取需要的信息。publ原创 2012-06-16 19:20:34 · 776 阅读 · 0 评论 -
eclipse鼠标悬浮提示过快
【转自】http://blog.csdn.net/shangpusp/article/details/6939937eclipse鼠标悬浮提示过快 修改注册表设置响应时间差http://untamedmind.wordpress.com/changing-the-mousehovertime-add-delay-on-the-tooltips-pop-up/找到转载 2012-06-17 02:32:49 · 2390 阅读 · 0 评论 -
Java 解析 xml 之 Digester
看了Tomcat的源代码,发现Tomcat是通过Digester方式来解析server.xml的Catalina中:/** * Create and configure the Digester we will be using for startup. */protected Digester createStartDigester() { long t1=System原创 2012-06-17 15:57:22 · 1447 阅读 · 0 评论 -
JavaCC 之 HelloWorld
HelloWorld:options { STATIC = false;}PARSER_BEGIN(Hello)package test.xue.javacc.hello;public class Hello {}PARSER_END(Hello)SKIP : {"\r" | "\n"}TOKEN : {}void parse() :{}{ ( "+原创 2012-05-16 22:34:57 · 915 阅读 · 0 评论 -
Lucene 之 Hello world
public class HelloLucene { public static final String INDEX_DIR = "D:/develop/src/EclipseWorkspace110319/LuceneTest/data/index"; public static final String DOCS_DIR = "D:/develop/src/EclipseWorksp原创 2012-06-02 23:13:47 · 732 阅读 · 0 评论 -
启动Java程序时JVM中的线程
今天用 Eclipse Memory Analyzer 分析一个Heap OutOfMemoryError,意外发现 除了 main线程外,还有其他四个线程,如图(1) main无需赘述,程序主线程,Eclipse Debug时也会看到(2) Signal Dispatcher处理操作系统底层信号参考:http://www.ibm.com/developer原创 2012-05-21 09:02:39 · 1555 阅读 · 0 评论 -
Transactions
企业级应用会在一个或多个数据库中存取数据。这些数据必须是准确的、实时的、可靠的(accurate, current, reliable)当多个操作同时更新同一条数据时,或者执行一个操作时出现了异常,都可能会导致数据的完整性缺失。Transaction应运而生。Transaction会控制多个操作同时访问的情况。Transaction会在出现异常的时候,执行回滚操作,确保数据处于原创 2012-08-26 15:13:32 · 1022 阅读 · 0 评论 -
JTA Transactions
JTA : Java Transaction API界定事务的方式与事务管理器的实现无关。允许分布式事务处理。JTA transaction允许访问多个数据库,通常的DBMS transaction是不允许的。JTA transaction不允许nested transaction。JTS : Java Transaction ServiceGlassFish提供了原创 2012-08-26 22:17:09 · 3126 阅读 · 0 评论 -
JMX : Standard MBean
Standard MBean由一个接口和一个实现类组成。命名规范 :接口 : XXXMBean实现类 : XXX按照约定,MBean的name为XXX。自定。接口中的每个方法定义了一个attribute或operation。以get或set开头的方法 : 如果符合getter或setter的模式,就是定义了一个attribute,类型为getter的返回值类型或setter原创 2012-08-25 18:17:18 · 3498 阅读 · 0 评论 -
SSH环境搭建
转载请注明来源:http://blog.csdn.net/xuefeng0707/article/details/88884841. 资源准备Struts-2.3.4.1Spring-3.0.5Hibernate-3.6.102. 新建空白Web项目新建一个空白的Web项目,取名为ssh,目录结构如图:部署到Tomcat中:3. 配置Struts2原创 2013-05-06 15:33:06 · 17757 阅读 · 12 评论 -
java.util.HashMap源码初探
对于一个存储类的分析,无非从两点入手:存储用的数据结构,存储的运行机制。数据结构:数组 /** * The table, resized as necessary. Length MUST Always be a power of two. */ transient Entry[] table;Entry链表格式。也即,HashMap中采用原创 2013-03-30 01:27:38 · 3315 阅读 · 0 评论 -
Eclipse调试进入JDK源码
对于想了解JDK源码的同学来说,通过调试JDK源码来学习是一个常用的方法。如果调试时,不能进入JDK源码,大部分错误都是line unavailable,则需要设置一番。【Window】-【Preference】-【Java】-【Installed JREs】这里可以看到Eclipse可以使用的Java环境,默认使用的是JRE(Java Runtime Environment),是不支原创 2013-03-30 00:53:24 · 11243 阅读 · 5 评论 -
Tomcat 配置gzip无效
提升Tomcat性能方法有很多种,使用NIO Connector和启用gzip压缩是其中两种。NIO:Java New IO,使用了多路复用的技术,无疑要比普通的IO socket要高效。gzip:对需要传输到前台的内容首先在内存中进行gzip压缩,这样可以大大的减少网络带宽占用。前提是前台的Accept-Encoding允许gzip。但是,当同时配置了这两个时,会发现大于48KB的文原创 2013-03-11 21:11:08 · 7800 阅读 · 1 评论 -
Eclipse导入Tomcat源代码
1. 到官网下载Tomcat源代码,这里用到的是apache-tomcat-6.0.35-src.zip。2. 在Eclipse中新建空的Java项目,取名为apache-tomcat-6.0.35-src(随意)。3. 把源码中的所有文件复制到空项目下。4. 把conf、java、test三个文件夹作为Source Folder。5. 此时编译,会报些错误,添加些必要的jar和J原创 2013-02-25 10:40:57 · 4200 阅读 · 2 评论 -
JMX : Remote Management
JMX connectorremote Java client 通过connector来访问MBean,connector的client side的接口和MBean的接口保持一致。两部分:connector client : 创建与server之间的连接。通常处于和server不同的JVM上,或处于不同的机器上。connector server : 与MBean Serve原创 2012-08-26 00:10:30 · 10048 阅读 · 1 评论