- 浏览: 330022 次
- 性别:
- 来自: 南京
最新评论
文章列表
PriorityQueue是基于优先级堆的极大优先级队列
此队列按照构造时所指定的顺序对元素排序,即可以根据元素自然顺序来排序(Comparable)也可以指定Comparator。该类还具有以下特点:
1.用数组实现,但是数组大小可以动态增加且无上限
2.改实现不是线程安全的,多线程时可以用PriorityBlockingQueue
3.不允许使用null元素
4.此实现为插入方法提供O(log(n))时间(log2)
位remove和contains提供线性时间
原因看排序原理
5.这里的iterator()方法提供的迭代器不保证以有序方式遍历
如果需要按顺序遍历,请考 ...
线程优先级和守护线程
- 博客分类:
- java基础
线程优先级
java中线程优先级的范围是1~10,默认为5,优先级高的线程会优于低的线程,另外还有以下特点
1.优先级有继承性,如A线程启动B线程,在没有主动声明的情况下B线程继承A线程的优先级
2.CPU尽量将执行资源让给优先级高的线程,即线程优先级高的总是会大部分先执行,但不是绝对的
java中有两种线程:用户线程和守护线程
1.线程类型也具有继承性
2.当只有守护线程在运行时,JVM自动退出
public class MyComparator implements Comparator<Integer>{
public MyComparator(){
}
//若返回正数,则代表o1应该排在o2的后面;返回负数,则o1排在o2的前面;返回0,代表两个元素相等
//所以如果从小往大排则return o1-o2 从大往小排 return o2 - o1
@Override
public int compare(Integer ...
简单枚举定义
public enum EnumTest{
MON,TUE,WED,THU,FRI,SAT,SUN
}
创建枚举类型要用enum关键字,尽管语法结构与class的不一样,但是经过编译器编译之后产生的也是一个class文件,该class文件反编译可以看到实际上生成一个类,该类继承java.lang.Enum<E>。枚举值(MON。。)就是在EnumTest内部生成类型为EnumTest的常量对象。所以实际上enum就是一个构造函数为private的class。
public class com.hmw.test.EnumTest extends java ...
线程池类java.util.concurrent.ThreadPoolExecutor,常用构造方法为:
ThreadPoolExecutor(int corePoolSize,int maximumPoolSize,long keepAliveTime,TimeUnit unit,
BlockingQueue workQueue,RejectedExecutionHandler hander)
corePoolSize:线程池维护线程的最少数量
maximumPoolSize:线程池维护的最大数量
keepAliveTime:线程池维护线程所允许的空闲时间
unit:线程池维护线 ...
线程安全的Integer类
- 博客分类:
- java基础
AtomicInteger,一个提供原子操作的Integer类,在java中,++i和i++都不是线程安全的。AtomicInteger提供一种线程安全的加减操作
//获取当前值 get()
//取当前值并设置新的值 getAndSet(int newValue)
//获取当前值并自增 getAndIncrement()
//获得当前值并自减 getAndDecrement()
//获得当前值,并加上固定值 getAndAdd(int delta)
Iterator与ListIterator
- 博客分类:
- java基础
Iterator和ListIterator主要区别有:
一、ListIterator有add()方法,可以向List中添加对象,而Iterator不能
二、两者都有hasNext()和next()方法,可以实现顺序向后遍历。ListIterator有hasPrevious和previous()方法,可以实现逆向(向前)遍历Iterator不行
三、ListIterator可以定位当前索引位置,nextIndex()和previousIndex()可以实现,iterator没有此功能
四、都可实现删除对象,但是ListIterator可以实现对象的修改,set()方法可以实现
功 ...
哈希(Hash)算法就是单向散列算法,它把某个较大的集合P映射到另一个较小的集合Q中,加入这个算法叫H,就有Q=H(P)。对于P中任何一个值p都有唯一确定的q与之对应,但是一个q可以对应多个p。作为一个有用的Hash算法,H还应该 ...
mybatis插入空值
- 博客分类:
- mybatis
MyBatis 插入空值时,需要指定JdbcType
mybatis insert空值报空值异常,主要原因是当你传入null对象时mybatis无法获取对应的jdbcType,无法进行转换
BeanUtils提供对反射和自省API的包装
这里只介绍他的copyProperties()方法
public static void copyProperties(java.lang.Object dest,java.lang.Object orig)
throws java.lang.IllegalAccessException,
java.lang.reflect.InvocationTargetException
它的作用是将dest和orig具有相同名称的字段的值从orig复制到dest中
...
遍历map的4中方法
- 博客分类:
- java基础
方法一 在for-each循环中使用entry来遍历
Map map = new HashMap();
for(Map.Entry entry : map.entrySet()){
entry.getKey();
entry.getValue();
}
for-each是java 5引入。如果遍历的是一个空的map对象for-each会抛出NullPointerException,因此遍历前总是应该检查是否为空
方法二 在for-each循环中遍历keys或values
Map map = new HashMap();
for(Obj ...
多线程利器queue
- 博客分类:
- java基础
在java多线程应用中,队列的使用率很高,java提供的线程安全的queue分为阻塞队列和非阻塞队列,其中阻塞队列例子如linkedBlockingQueue(看名字就知道了),非阻塞的比如ConcurrentLinkedQueue
什么叫线程安全?线程安全的类指的是 类内部共享的全局变量的访问必须保证是不受多线程形式影响的。如果由于多线程的访问,造成有些变量结构被破坏或针对这些变量操作的原子性被破坏,则这个类就不是线程安全的
queue接口与list、set接口一样继承collection接口
队列是一种数据结构,它有两个基本操作:在队尾加入一个元素,从队头移除一个元素。也 ...
sleep wait区别
- 博客分类:
- java基础
每个对象都有一个机锁来控制同步访问,synchronized关键字可以和对象机锁交互,来实现线程的同步
sleep是Thread类的方法,调用时线程休眠。
如果在同步方法中调用sleep,线程休眠,锁还在。
wait是object类的方法,必须在同步方法或同步代码块中使用,当一个对象使用wait方法即obj.wait()时,会释放obj对象锁。
如果当前线程不是对象锁的持有者,该方法抛出一个java.lang.IllegalMonitorStateException异常。
eclipse代码格式设置
- 博客分类:
- eclipse和tomcat
window-->preferences-->java-->codestyle 其下有两个选项formatter和clean up
formatter主要是设置换行、缩进、空格等格式
clean up 自动化格式代码
昨天代码审查说是不太规范,import项目中相关的cleanup、formatter文件 apply就行
ctrl+shift+f 规范代码
ctrl+shift+o 添加缺少的import删除多余的import
cleanup source shift+alt+s里都有
方法注释输入/**再按enter就行
...
maven 聚合和继承
- 博客分类:
- maven
聚合
为了能够使用一条命令就能构建多个模块,需要额外创建一个模块,然后通过该模块构建整个项目所有模块,该模块暂且称之为聚合模块。聚合模块本身作为一个maven项目,必须要有自己的pom,不过作为一个聚合项目,其p ...