java技术栈进阶笔试&&面试经验

Java 杂论(持续更新中)

2017-08-11  本文已影响7人  进击的小鹿

使用Integer.valueOf()进行构造时,就使用了cache[]缓存数组

Integer 之间比较最好不要用 == 。

<? extends T> 表示类型的上界,表示参数化类型的可能是T 或是 T的子类

<? super T> 表示类型下界(Java Core中叫超类型限定),表示参数化类型是此类型的超类型(父类型),直至Object

参考:Java泛型通配符<? extends T>与<? super T>

 Map<Integer, Integer> map = new HashMap<Integer, Integer>();  
  
for (Map.Entry<Integer, Integer> entry : map.entrySet()) {  
  
    System.out.println("Key = " + entry.getKey() + ", Value = " + entry.getValue());   
  
}  

内联不一定好,当被指定为内联的方法体很大时,展开的开销可能就已经超过了普通函数调用调用的时间,引入了内联反而降低了性能,因为在选择这个关键字应该慎重些,不过,在以后高版本的JVM中,在处理内联时做出了优化,它会根据方法的规模来确定是否展开调用。

(2)使用final是所谓的安全发布(safe publication)的一种方式: 如果一个对象将会在多个线程中访问并且你并没有将其成员声明为final,则必须提供其他方式保证线程安全

“其他方式”可以包括声明成员为volatile,使用synchronized或者显式Lock控制所有该成员的访问。

当构造函数结束时,final类型的值是被保证其他线程访问该对象时,它们的值是可见的(当声明一个final成员时,必须在构造函数退出前设置它的值)

final类型的成员变量的值,包括那些用final引用指向的collections的对象,是读线程安全而无需使用synchronization的

不可变对象(指所有的成员都是final并且成员要么是基本类型,要么指向另一个不可变对象)可以并发访问而无需使用同步机制。通过final引用读取“实际不可变”对象(指成员虽然实际并不是final,然而却从不会改变)也是安全的。

参考http://www.cnblogs.com/mianlaoshu/articles/3648403.html

 public class ReturnTest {
  public static int func(int arg){
    int i   = 0;

    try {
        System.out.println("in try……");
        i = 1000 / arg ;
        //return i ;
    }catch (Exception e){
        e.printStackTrace();
        System.out.println("in catching ……");
        return 1000;
    }finally {
        System.out.println("in finally ……");
       // return  10000;
    }

    return i;

}


public static void main(String[] args){

    System.out.println(ReturnTest.func(0));


  }
}

参考:1

这样应该就清楚一点了,对于CountDownLatch来说,重点是那个“一个线程”, 是它在等待, 而另外那N的线程在把“某个事情”做完之后可以继续等待,可以终止。而对于CyclicBarrier来说,重点是那N个线程,他们之间任何一个没有完成,所有的线程都必须等待。

上一篇下一篇

猜你喜欢

热点阅读