有意思的记录-Java

1.文件读取

项目外的绝对路径或相对路径文件读取
String path = "/xx/xx.txt";
BufferedReader reader = new BufferedReader(
    new FileReader(new File(path));

项目内(常常是resources目录下)或jar包内文件读取

InputStream file = this.getClass().getClassLoader().getResourceAsStream("/xx/xx.txt");
//或者xx.class.getResourceAsStream("xx.txt");
BufferedReader reader = new BufferedReader(new InputStreamReader(file, "UTF-8"));

2.List遍历删除

Iterator<String> it = list.iterator();
while (it.hasNext()) {
    String str = it.next();
    //if xx
    it.remove();
}

3.单例模式

//基于classloder避免多线程同步问题
public class Singleton {  
    private static final Singleton instance = new Singleton();  
    private Singleton (){}
    public static Singleton getInstance() {  
        return instance;  
    }
}
//双重校验,避免内存栅栏
public class Singleton {  
    private volatile static Singleton singleton;  
    private Singleton (){}   
    public static Singleton getSingleton() {  
        if (singleton == null) {  
            synchronized (Singleton.class) {  
                if (singleton == null) {  
                    singleton = new Singleton();  
                }  
            }  
        }  
        return singleton;  
    }  
}

4.遍历HashMap

HashMap mp = new HashMap(); 
Iterator it = mp.entrySet().iterator();
while (it.hasNext()) {
    Map.Entry pair = (Map.Entry)it.next();
    System.out.println(pair.getKey() + " = " + pair.getValue());
    it.remove(); // avoids a ConcurrentModificationException
}

5.优雅的处理Interrupt

try {
    Thread.sleep(1000);    
} catch(InterrupedException e){
    Thread.currentThread().interrupt();//设置中断flag为true,因为sleep已经重置了中断标志 
    throw new RuntimeException(ex);  
}

为啥又中断了一次当前线程,因为sleep响应中断的方法是:if any thread has interrupted the current thread. The interrupted status of the current thread is cleared when this exception is thrown. 会将当前线程的中断状态清空,然后抛出异常。如果当前线程有其他函数也在监听中断状态,将不会再获得中断状态为true的情况,从而达不到interrupt的效果。

其他函数在监控中断状态
while(!Thread.interrupted()){
 //do something  
}

  





你可能感兴趣的:(有意思的记录-Java)