- 浏览: 51491 次
- 性别:
- 来自: 杭州
最新评论
文章列表
关于线程中断的一点困惑,已解决
- 博客分类:
- java
二、对于处于sleep,join等操作的线程,如果被调用interrupt()后,会抛出InterruptedException,然后线程的中断标志位会由true重置为false,因为线程为了处理异常已经重新处于就绪状态。
我在运行thinking in java里中断的例子时,一直都很奇怪为什么在catch(InterruptedException e)的处理段里,thead.isInterrupted()返回的都是false,原来是已被重置。
四、不可中断的操作,包括进入synchronized段以及Lock.lock(),inputSteam.read()等,调用interru ...
转载:Java编程中“为了性能”需做的26件事
- 博客分类:
- java
最近的机器内存又爆满了,除了新增机器内存外,还应该好好review一下我们的代码,有很多代码编写过于随意化,这些不好的习惯或对程序语言的不了解是应该好好打压打压了。
下面是参考网络资源总结的一些在Java编程中尽可 ...
ArrayList源代码详解
- 博客分类:
- java
看remove方法的底层实现:
public E remove(int index){
RangeCheck(int index);//判断是否越界
modCount++;
E oldValue = (E)elementData[index];//获得删除的元素
int numMoved = size-index-1;//得到删除元素后面的元素个数
if(numMoved >0)
System.arraycopy(elementData,index+1,elementData,index,numMoved );//把后面的 ...
上次去某大公司面试,问到了equals方法和hashCode()方法,现在总结一下
1,equals方法:
1,自反性,x.equals(x);为true,前提是X不为空
2,对称性,如果x.equals(y)为true,则y.equals(x)也为true
3,传递性,如果x.equals(y)为true,且y.equals( ...
刚开始认为使用了ConcurrentLinkedQueue类之后意味着不需要自己进行任何同步或加锁操作,查了下资料,如果直接使用它提供的函数,比如:queue.add(obj); 或者 queue.poll(obj);,这样我们自己不需要做任何同步。但如果是非原子操作,比如: if(!queue.isEmpty()) { queue.poll(obj); } 我们很难保证,在调用了isEmpty()之后,poll()之前,这个queue没有被其他线程修改。所以对于这种情况,我们还是需要自己同步: synchronized(queue) { if(!queu ...
在程序中经常有建立定时异步任务的需求,下面介绍几种实现方法:1,使用spring quartz定时器Quartz是一个强大的企业级任务调度框架,Spring中继承并简化了Quartz,下面就看看在Spring中怎样配置Quartz。首先,定义一个执行定时异步 ...
hashCode与equals深度剖析与源码详解
- 博客分类:
- java
上次去某大公司面试,问到了equals方法和hashCode()方法,现在总结一下
1,equals方法:
1,自反性,x.equals(x);为true,前提是X不为空
2,对称性,如果x.equals(y)为true,则y.equals(x)也为true
3,传递性,如果x.equals(y)为true,且y.equals(z)为true,则x.equals(z)为true
4,一致性,x.equals(y)的第一次调用为true,那么x.equals(y)的第2次,3次。。。n次也为true,前提是在这个比较过程中x与y的值没有被修改
5,x.equals(null)为fals ...
LinkedList源码详解
- 博客分类:
- java
LinkedList底层是用双向链表实现的;
下面看其构造方法:
public LinkecList(){
header.next=header.previous=header;
}
此处构造了双向链表的一个头节点。
再看一下header的定义:
private transient Entry<E> header = new Entry<E>(null, null, null);
然后在看Entry
private static class Entry<E> {
E element;
Entry<E> next;
...
对于add(int index,object o);该方法在特定位置插入元素,底层数组的元素都往后面移动一位,代价相当高,同理remove(int index)
对于ArrayList构造方法源代码详解:
public ArrayList(){
this(10);//调用子类带参数的构造方法
}
public ArrayList(int initialCapacity){
super();
if(initialCapacity<0){
//抛出异常
}
this.elementData=new Object( ...
不使用中间变量实现两个整数的互换
- 博客分类:
- java
int a=10,b=5;
互换:
a=a+b;
b=a-b;
a=a-b;
由于刚刚开始搞ibatis,犯了几个低级的错误:参考了下http://jun1986.iteye.com/blog/1150606的帖子,得出结论如下:
1.User.xml中,必须要定义namespace
2.
使用时要这样.queryForObject("namespace.id名",object/parameterObject);
endLogTimeDate = “2012-05-22 17:10:46”
startLogTimeDate = “2012-05-22 17:10:46”
var endLogTimeDate = new Date(Date.parse(endLogTime.replace(/-/g, "/")));
var startLogTimeDate = new Date(Date.parse(startLogTime.replace(/-/g, "/")));
日期的操作:
endLogTimeDate .getYear(); //获 ...
刚用SimpleDateFormat时犯了一个低级错误,导致我调试了一个晚上,真是无语
错误语句如下:
SimpleDateFormat sd = new SimpleDateFormat("yyyy-mm-dd hh:mm:ss");
竟然没注意到,后来经人提醒才恍然大悟,如下:
SimpleDateFormat sd = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
为了打出个sql语句搞了半天,后来参考了下http://ganlanshu.iteye.com/blog/339746这个帖子,终于搞定
在log4j.properties加上
log4j.appender.stdout=org.apache.log4j.ConsoleAppender
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
log4j.appender.stdout.layout.ConversionPattern=%d %p [%c] - %m%n
log4j.logger.com.ibatis=deb ...