從try-with-resources到ThreadLocal,優(yōu)化你的代碼編寫(xiě)方式
1. 使用try-with-resources簡(jiǎn)化文件讀取操作:
修改前:
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表達(dá)式簡(jiǎn)化集合操作:
修改前:
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. 使用靜態(tài)導(dǎo)入簡(jiǎn)化代碼:
修改前:
System.out.println(Math.sqrt(2));
修改后:
import static java.lang.Math.sqrt; System.out.println(sqrt(2));
5. 使用斷言簡(jiǎn)化調(diào)試:
修改前:
if (x < 0) { throw new IllegalArgumentException("x must be non-negative"); }
修改后:
assert x >= 0 : "x must be non-negative";
6. 使用Optional類處理可能為空的對(duì)象:
修改前:
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表達(dá)式和Stream API簡(jiǎn)化集合操作:
修改前:
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避免線程安全問(wèn)題:
修改前:
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()); } }
在多線程環(huán)境下,使用普通的成員變量會(huì)導(dǎo)致線程安全問(wèn)題,而使用ThreadLocal可以確保每個(gè)線程訪問(wèn)的變量是獨(dú)立的,避免了線程安全問(wèn)題。在上面的示例中,使用ThreadLocal確保了每個(gè)線程訪問(wèn)的count變量是獨(dú)立的,從而避免了線程安全問(wèn)題。
以上就是從try-with-resources到ThreadLocal,優(yōu)化你的代碼編寫(xiě)方式的詳細(xì)內(nèi)容,更多關(guān)于try-with-resources ThreadLocal優(yōu)化代碼的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!
相關(guān)文章
rocketmq client 日志的問(wèn)題處理方式
這篇文章主要介紹了rocketmq client 日志的問(wèn)題處理方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2021-10-10基于Lucene的Java搜索服務(wù)器Elasticsearch安裝使用教程
Elasticsearch也是用Java開(kāi)發(fā)的,并作為Apache許可條款下的開(kāi)放源碼發(fā)布,能夠做到實(shí)時(shí)搜索,且穩(wěn)定、可靠、快速,安裝使用方便,這里我們就來(lái)看一下基于Lucene的Java搜索服務(wù)器Elasticsearch安裝使用教程:2016-06-06Java設(shè)計(jì)模式之策略模式_動(dòng)力節(jié)點(diǎn)Java學(xué)院整理
策略模式是對(duì)算法的封裝,把一系列的算法分別封裝到對(duì)應(yīng)的類中,并且這些類實(shí)現(xiàn)相同的接口,相互之間可以替換。接下來(lái)通過(guò)本文給大家分享Java設(shè)計(jì)模式之策略模式,感興趣的朋友一起看看吧2017-08-08java實(shí)現(xiàn)文件切片上傳百度云+斷點(diǎn)續(xù)傳的方法
文件續(xù)傳在很多地方都可以用的到,本文主要介紹了java實(shí)現(xiàn)文件切片上傳百度云+斷點(diǎn)續(xù)傳的方法,?文中通過(guò)示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2021-12-12idea中Stash與Unstash的使用及說(shuō)明
這篇文章主要介紹了idea中Stash與Unstash的使用及說(shuō)明,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2023-02-02Spring Boot實(shí)現(xiàn)熱部署的實(shí)例方法
在本篇文章里小編給大家整理的是關(guān)于Spring Boot實(shí)現(xiàn)熱部署的實(shí)例方法和實(shí)例,需要的朋友們可以參考下。2020-02-02Spring Boot學(xué)習(xí)入門(mén)之表單驗(yàn)證
表單驗(yàn)證主要是用來(lái)防范小白搞亂網(wǎng)站和一些低級(jí)的黑客技術(shù)。Spring Boot可以使用注解 @Valid 進(jìn)行表單驗(yàn)證。下面這篇文章主要給大家介紹了關(guān)于Spring Boot學(xué)習(xí)入門(mén)之表單驗(yàn)證的相關(guān)資料,需要的朋友可以參考借鑒,下面來(lái)一起看看吧。2017-09-09