`
文章列表
1.String是不可变类,StringBuffer和StringBuilder是可变类。 2.StringBuffer是线程安全类,StringBuilder不是的,所以StringBuilder会比StringBuffer性能上更快。 3.String运算符“+”是内部使用StringBuffer或StringBuilder实现的。 4.Use String if you require immutability, use Stringbuffer in java if you need mutable + thread-safety and use      StringBuild ...
 这个是tomcat下bin目录下的 catalina.bat/ catalina.sh下的一个设置 "CATALINA_HOME=%CURRENT_DIR%" 所以此时catalina_home的目录就是bin目录,如果在log4j中这样配置日志文件: log4j.appender.logfile.File=logs/XXXX.log则该文件就在bin目录下的新建log文件夹存放日志文件。 这样做是不适合的。平常要手动指定日志文件的目录,可以结合spring指定日志文件目录。
当在General的 Editors和Java的Code Style分别设置好替换空格为4个space后,还需要在xml目录下面设置xml下面的tab替换:XML--->XML Files---->Editor       在点击Editor后,右侧显示出来的目录中勾选Indent using space,有时候默认为Indent using  tab,看字面意思就知道选哪个了。。。选中后修改下面的Indentation size 为4,表示需要用4个space替换一个tab同时也可以看看Splite multiple attribute each on a new line有没有勾 ...
这个就不写文章了吧,这篇文章就够了。   参考:http://wcl2184-163-com.iteye.com/blog/1457798
在java中,interface和abstract class都是为了“面向接口编程而不是面向实现编程”而设计的,但是在java中他们的关系和各自的优缺点是什么呢? 1.如你所知,在java中只支持单extends,但是可以implements多个interface,所以如果你的类 extends了一个abstract类,就是去了extends其他抽象类的机会了。   2.interface是用来表示行为的,如Clonable,Runnable,Serializable等,如果你用abstract class表示行为,那你的类就不肯能同时具有Clonable和Runnable的行为 ...
1.如果超类(没有实现Serializable接口)没有提供可访问的无参构造器,其子类都不可能做到可序列化。所以 对于为继承而设计的不可序列化的类,你应该考虑提供一个无参构造器。这样便于以后子类可以自由选择 是否可序列化。     2.内部类不应该实现Serializable。内部类是使用编译器产生的合成域来保存指向外围实例的引用,以及保存来自外围作用域的局部变量值。而这些域如何对应到类的定义中,没有明确规定(JLS)。   3.静态成员类可以实现Serializable接口。   参考书籍:《effective java》
Thread.stop()是一个不建议使用的方法。    Thread in Java will stop once run() method finished. Another important point is that you can not restart a Thread which run() method has finished already , you will get an IllegalStateException.所以正确让一个线程stop的方式是使用一个volatile变量来控制。 public class StoppableThread extends ...
public void refresh() throws BeansException, IllegalStateException { synchronized (this.startupShutdownMonitor) { prepareRefresh();//准备启动spring容器,设置容器的启动日期和活动标志 ConfigurableListableBeanFactory beanFactory = obtainFreshBeanFactory();//获得容器ApplicationContext的子类BeanFactory。步骤如下:如果已经有了 ...

happens-before原则

    博客分类:
  • j2se
 下面是java内存模型下一些“天然”的先行发生关系,这些先行发生关系无须任何同步器协助就已经存在,可以在编码中直接使用。如果两个操作之间的关系不再此列,并且无法从下面规则中推导出来,则它们就没有顺序性保障,虚拟机可以对它们进行任意地重排序。   1.Program order rule. Each action in a thread happens-before every action in that thread that comes later in the program order.     程序次序规则:在一个线程内,按照程序代码的顺序,书写在前面的操作先行发生与书 ...
How will you take thread dump in Java? How will you analyze Thread dumpIn UNIX you can use kill -3 and then thread dump will print on log on windows you can use "CTRL+Break". Rather simple and focus thread interview question but can get tricky if he ask how you analyze it. Thread dump ca ...
1.wait()和sleep()的区别 A.wait()方法属于Object对象的,而sleep()方法是Thread类的静态方法。wait()方法的调用必须 在synchronized的方法或代码块里,否则会抛IllegalMonitorStateException异常,而sleep() 方法没有这个限制。 B.wait()方法可以被唤醒通过notify()或notifyAll()方法。 C.调用wait()方法时会释放对象的Lock or monitor,但是调研sleep()方法不会释放对象的Lock or monitor,尽管两者都使得Thread处于waiting状态 ...
1.如果你有三个线程,分别为T1,T2,T3,如何让线程T2在线程T1之后执行,在线程T3之前执行。 答案是:使用线程的join方法,该方法的作用是“等待线程执行结束”,即join()方法后面的代码块都要等待现场执行结束后才能执行。事例代码如下: package com.liuan.job; public class Test { @SuppressWarnings("static-access") public static void main(String[] args) throws InterruptedException { Thread ...
1.数组提供了运行时的类型安全,但是没有编译时的类型安全检测;而泛型提供了编译时类型安全检查,运行时进行类型擦除。   如下代码: Object[] longArray = new Long[1]; longArray[0]="I am test";  编译可以通过,但是运行的时候会抛出:java.lang.ArrayStoreException异常。   而如下代码: List<Object> list = new ArrayList<Long>(); //Type mismatch: cannot convert ...
   Java 1.5(Tiger)发行版本增加了泛型(generic)。在没有增加generic之前,从集合中读取到的每一个对象都必须进行类型转换。如果有人不小心向集合里插入了类型错误的对象,那么在编译期不会出现任何错误提示,在运行期就会出 ...
package com.lp.liuan; import java.io.FileInputStream; import java.io.FileNotFoundException; import java.io.IOException; import java.nio.ByteBuffer; import java.nio.CharBuffer; import java.nio.channels.FileChannel; import java.nio.charset.Charset; import java.nio.charset.CharsetDecoder; ...
Global site tag (gtag.js) - Google Analytics