从try-with-resources到ThreadLocal,优化你的代码编写方式
作者:不一样的科技宅 时间:2023-11-11 03:19:52
1. 使用try-with-resources简化文件读取操作:
修改前:
FileInputStream fis = null;
try {
fis = new FileInputStream("file.txt");
// ...
} catch (FileNotFoundException e) {
e.printStackTrace();
} finally {
if (fis != null) {
try {
fis.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
修改后:
try (FileInputStream fis = new FileInputStream("file.txt")) {
// ...
} catch (IOException e) {
e.printStackTrace();
}
2. 使用Lambda表达式简化集合操作:
修改前:
List<String> names = Arrays.asList("Alice", "Bob", "Charlie");
for (String name : names) {
System.out.println(name);
}
修改后:
List<String> names = Arrays.asList("Alice", "Bob", "Charlie");
names.forEach(name -> System.out.println(name));
3. 使用StringBuilder类拼接字符串:
修改前:
String s = "";
for (int i = 0; i < 10; i++) {
s += i;
}
修改后:
StringBuilder sb = new StringBuilder();
for (int i = 0; i < 10; i++) {
sb.append(i);
}
String s = sb.toString();
4. 使用静态导入简化代码:
修改前:
System.out.println(Math.sqrt(2));
修改后:
import static java.lang.Math.sqrt;
System.out.println(sqrt(2));
5. 使用断言简化调试:
修改前:
if (x < 0) {
throw new IllegalArgumentException("x must be non-negative");
}
修改后:
assert x >= 0 : "x must be non-negative";
6. 使用Optional类处理可能为空的对象:
修改前:
String s = null;
if (s != null) {
System.out.println(s.length());
}
修改后:
Optional<String> optional = Optional.ofNullable(null);
optional.ifPresent(s -> System.out.println(s.length()));
7. 使用枚举类替代常量:
修改前:
public static final int STATUS_NEW = 0;
public static final int STATUS_PROCESSING = 1;
public static final int STATUS_COMPLETED = 2;
修改后:
public enum Status {
NEW,
PROCESSING,
COMPLETED
}
8. 使用自定义异常类替代通用异常类:
修改前:
try {
// ...
} catch (Exception e) {
e.printStackTrace();
}
修改后:
try {
// ...
} catch (MyCustomException e) {
e.printStackTrace();
}
9. 使用Lambda表达式和Stream API简化集合操作:
修改前:
List<Integer> numbers = Arrays.asList(1, 2, 3, 4, 5);
List<Integer> evenNumbers = new ArrayList<>();
for (int number : numbers) {
if (number % 2 == 0) {
evenNumbers.add(number);
}
}
修改后:
List<Integer> numbers = Arrays.asList(1, 2, 3, 4, 5);
List<Integer> evenNumbers = numbers.stream()
10. 使用ThreadLocal避免线程安全问题:
修改前:
public class MyRunnable implements Runnable {
private int count = 0;
public void run() {
for (int i = 0; i < 100000; i++) {
count++;
}
System.out.println(count);
}
}
修改后:
public class MyRunnable implements Runnable {
private ThreadLocal<Integer> count = new ThreadLocal<Integer>() {
@Override
protected Integer initialValue() {
return 0;
}
};
public void run() {
for (int i = 0; i < 100000; i++) {
count.set(count.get() + 1);
}
System.out.println(count.get());
}
}
在多线程环境下,使用普通的成员变量会导致线程安全问题,而使用ThreadLocal可以确保每个线程访问的变量是独立的,避免了线程安全问题。在上面的示例中,使用ThreadLocal确保了每个线程访问的count变量是独立的,从而避免了线程安全问题。
来源:https://juejin.cn/post/7219467857649221688
标签:try-with-resources,ThreadLocal,优化代码
0
投稿
猜你喜欢
java实现图片写入高清字体及带边框的方法
2023-11-29 03:43:47
Spring Boot利用Docker快速部署项目的完整步骤
2022-03-08 18:52:55
一文搞懂Java ScheduledExecutorService的使用
2022-11-22 14:23:35
一篇超详细的SpringBoot整合MybatisPlus的文章
2023-02-26 11:04:35
Java的Comparable,Comparator和Cloneable三大接口详解
2023-07-14 11:18:48
C#模式画刷HatchBrush用法实例
2021-10-01 08:59:45
Java开发完整短信验证码功能的全过程
2023-05-05 15:35:24
java web返回中文乱码问题及解决
2023-08-25 08:23:08
Unity创建平铺网格地图的方法
2022-07-06 16:05:49
Android使用开源组件PagerBottomTabStrip实现底部菜单和顶部导航功能
2023-07-02 11:32:40
如何使用JaCoCo分析java单元测试覆盖率
2023-01-13 11:38:39
Android实现捕获TextView超链接的方法
2021-07-03 08:44:04
MyBatis-Plus实现2种分页方法(QueryWrapper查询分页和SQL查询分页)
2021-08-12 09:52:55
C#查找字符串所有排列组合的方法
2022-07-04 10:01:54
Java用for循环Map详细解析
2021-06-08 08:23:03
Java中ArrayList类的用法与源码完全解析
2023-07-22 02:32:49
解决Springboot get请求是参数过长的情况
2023-11-27 16:45:37
Java实现链表数据结构的方法
2023-10-19 20:36:57
工作中禁止使用Executors快捷创建线程池原理详解
2021-11-24 20:55:48
Spring与Struts整合之让Spring管理控制器操作示例
2022-08-22 12:53:46