有意思的记录-Java

1.文件读取

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

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

1
2
3
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遍历删除

1
2
3
4
5
6
Iterator<String> it = list.iterator();
while (it.hasNext()) {
    String str = it.next();
    //if xx
    it.remove();
}

3.单例模式

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
//基于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

1
2
3
4
5
6
7
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

1
2
3
4
5
6
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的效果。

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

  





posted @   春文秋武  阅读(288)  评论(1编辑  收藏  举报
编辑推荐:
· Java 中堆内存和栈内存上的数据分布和特点
· 开发中对象命名的一点思考
· .NET Core内存结构体系(Windows环境)底层原理浅谈
· C# 深度学习:对抗生成网络(GAN)训练头像生成模型
· .NET 适配 HarmonyOS 进展
阅读排行:
· 本地部署 DeepSeek:小白也能轻松搞定!
· 如何给本地部署的DeepSeek投喂数据,让他更懂你
· 从 Windows Forms 到微服务的经验教训
· 李飞飞的50美金比肩DeepSeek把CEO忽悠瘸了,倒霉的却是程序员
· 超详细,DeepSeek 接入PyCharm实现AI编程!(支持本地部署DeepSeek及官方Dee
点击右上角即可分享
微信分享提示