Comparator 和 Comparable比较 1. Comparator 和 Comparable 相同的地方他们都是java的一个接口, 并且是用来对自定义的class比较大小的,什么是自定义class: 如 public class Person{ String name; int age }.当我们有这么一个personList,里面包含了person1, person2, persion3....., 我们用Collect
Java虚拟机工作原理详解 一、类加载器首先来看一下java程序的执行过程。 从这个框图很容易大体上了解java程序工作原理。首先,你写好java代码,保存到硬盘当中。然后你在命令行中输入[java] view plain copyjavac YourClassName.java
Maven学习博客汇总 1、http://www.cnblogs.com/xdp-gacl/tag/Maven%E5%AD%A6%E4%B9%A0%E6%80%BB%E7%BB%93/ Maven学习总结(九)——使用Nexus搭建Maven私服 Maven学习总结(八)——使用Maven构建多模块项目 Maven学习总结(七
Maven学习 (六) 搭建多模块企业级项目 首先,前面几次学习已经学会了安装maven,如何创建maven项目等,最近的学习,终于有点进展了,搭建一下企业级多模块项目。好了,废话不多说,具体如下:首先新建一个maven项目,pom.xml的文件如下:搭建多模块项目,必须要有一个packaging为pom的根目录。创建好这个maven项目后,我们对着项目右键-->new输入你的项目名称
Maven学习 (五) Elipse中发布一个Maven项目到Tomcat 对于maven初学者的我,经常遇到一个问题就是,maven项目创建成功后,本来已经添加了jar的依赖,但是发布到Tomcat中就是没有jar包存在,启动Tomcat总是报没有找到jar包,可项目结构中确实已经有jar了,一直很郁闷,所以记录下来。1、首先确定好我们已经安装好maven需要的环境,并且已经创建好一个Maven依赖的Web项目,可以查看前几篇maven的学习内容搭建ma
Maven学习 (四) 使用Nexus搭建Maven私服 为什么要搭建nexus私服,原因很简单,有些公司都不提供外网给项目组人员,因此就不能使用maven访问远程的仓库地址,所以很有必要在局域网里找一台有外网权限的机器,搭建nexus私服,然后开发人员连到这台私服上,这样的话就可以通过这台搭建了nexus私服的电脑访问maven的远程仓库。1.首先确定我们的环境安装好maven,jdk等必须的环境2.这些都准备好之后,去下载最新版本的n
Maven学习 (三) 使用m2eclipse创建web项目 1.首先确认你的eclipse已经安装好m2eclipse的环境,可以参照上两篇Maven学习内容2.新建一个maven的项目3.下一步默认配置,使用默认的工作空间,或者你可以自己选择其他的空间4.一般我们都是web开发,所以选择maven-archetype-webapp5. 填写好相应的groupId,artifactId,version
Maven学习 (二) Eclipse 上安装 Maven3插件 eclipse 安装插件的方式最常见的有两种: 1. 一种是在线安装,这貌似是用的最多的,就是:Help --> Install New Software,然后输入 HTTP 地址来安装,但有一个很明显的缺点,就是慢,即使网络好也不见得很快安装好! 2. 另一种是离线安装的方式,用 link 的方式来安装,这种方式可拔性更好,非常方便。 下
Maven学习 (一) 搭建Maven环境 有两种方式可以配置maven的环境配置,本人推荐使用第二种,即使用本地的maven安装文件,个人感觉这样可以方便管理下载jar包的存放位置,错误信息的输出等,可以在dos窗口中可以清晰看到,虽然比较麻烦,每次都要敲dos命令,但可以写批处理文件来解决.方式一:不使用本地的maven安装文件环境配置(也即使用的是m2eclipse插件的默认配置) settings.x
23种设计模式汇总 目录创建型1. Factory Method(工厂方法)2. Abstract Factory(抽象工厂)3. Builder(建造者)4. Prototype(原型)5. Singleton(单例)结构型6. Adapter Class/Object(适配器)7. Bridge(桥接)8. Composite(组合)9. Decorator(装饰)
ReentrantLock学习 ReentrantLock是一个可重入的互斥锁,重入锁是一种递归无阻塞的同步机制。ReentrantLock由最近成功获取锁,还没有释放的线程所拥有,当锁被另一个线程拥有时,调用lock的线程可以成功获取锁。如果锁已经被当前线程拥有,当前线程会立即返回。 重入锁的构造方法提供一个可选的公平参数: 公平情况下,操作会排一个队按顺序执行,来保证执行顺序。
MyBatis学习(二)--走进MyBatis的世界 mybatis是个持久层的框架,用来执行数据库操作的,无外乎增删改查,上一节对mybatis有了宏观上的了解后,这一篇博客主要通过一个小示例来入门mybatis,先看一下要写的示例需求:根据用户id查询用户信息 根据用户名称模糊查询用户信息 添加用户、删除用户、更新用户 其实也就是增删改查,掌握这些,基本上就掌握了mybatis的基本操作了,下面一个个模块来完成。
MyBatis学习(一)--宏观上把握MyBatis框架 今天开始学习mybatis框架,博客主要记录学习过程中的一些总结,如有错误之处,欢迎留言指正~先用mybatis的鸟鸟来镇个楼,咳咳~~ mybatis框架是一个持久层框架,是Apache下的顶级项目。mybatis可以让开发者的主要精力放在sql上,通过mybatis提供的映射方式,自由灵活的生成满足需要的sql语句。MyBatis可以将向preparedStatemen
原子操作类学习(一) 原子操作类分类原子更新方式原子更新基本类型原子更新数组原子更新引用原子更新属性(字段)原子更新基本类型AtomicBoolean :原子更新布尔类型AtomicInteger: 原子更新整型AtomicLong: 原子更新长整型原子更新数组AtomicIntegerArray :原子更新整型数组里的元素AtomicLongArray :原
ConcurrentLinkedQueue学习(三) ConcurrentLinkedQueue应该注意的地方 刚开始认为使用了ConcurrentLinkedQueue类之后意味着不需要自己进行任何同步或加锁操作,查了下资料,如果直接使用它提供的函数,比如:queue.add(obj); 或者 queue.poll(obj);,这样我们自己不需要做任何同步。但如果是非原子操作,比如: if(!queue.isEmpty()) {
ConcurrentLinkedQueue学习(二) 服务端原本有个定时任务对一个集合ArrayList 中的消息做处理。 因为考虑到处理消息是先进先出原则,所以优化的时候考虑改用ConcurrentLinkedQueue 当时没仔细深入研究过这个集合就匆匆上线了。结果刚上线第二天就出问题了。服务端一次优化演变成了一个缺陷,还好及时回退了版本,后果才不是很严重。回退后对ConcurrentLinkedQueue 做了一个简单的测试代码如下
ConcurrentLinkedQueue学习(一) Java并发包中有很多精心设计的高并发容器。有ConcurrentHashMap、ConcurrentSkipListMap 、ConcurrentLinkedQueue等。ConcurrentLinkedQueue就是其中设计最为优雅的高并发容器。它被设计成了无锁的、无界的、非阻塞式的单向链表结构。现在就让我们来一步一步揭开他们神秘的面纱。 一说到链表结构,我们首先就会想到的就
concurrentHashMap学习(四) package JUC;import java.util.Collections;import java.util.HashMap;import java.util.Hashtable;import java.util.Map;import java.util.concurrent.ConcurrentHashMap;/** * 测试HashMap和ConcurrentHashMap
concurrentHashMap学习(三) ConcurrentHashMap的简要总结:1、public V get(Object key)不涉及到锁,也就是说获得对象时没有使用锁;2、put、remove方法要使用锁,但并不一定有锁争用,原因在于ConcurrentHashMap将缓存的变量分到多个Segment,每个Segment上有一个锁,只要多个线程访问的不是一个Segment就没有锁争用,就没有堵塞,各线程用各自
concurrentHashMap学习(二) 一、ConcurrentHashMap的初始化下面我们来结合源代码来具体分析一下ConcurrentHashMap的实现,先看下初始化方法:public ConcurrentHashMap(int initialCapacity, float loadFactor, int concurrencyLevel) { if (!(l