transient和synchronized的使用
阿新 • • 發佈:2018-12-13
col bean 對象 out serial stat prop 忽略 如果
transient和synchronized這兩個關鍵字沒什麽聯系,這兩天用到了它們,所以總結一下,兩個關鍵字做個伴!
transient
持久化時不被存儲,當你的對象實現了Serializable接口,這個對象就可以被存儲到磁盤上了,而有一些信息比較敏感時,不想被持久化,就可以聲明為transient,這時它只在內存中存在,保存到磁盤時將被忽略!
public class ExcelBean implements Serializable { private static final long serialVersionUID = 1L; private String headTextName; private String propertyName; private Integer cols = 0; private transient XSSFCellStyle cellStyle; }
上面代碼中,cellStyle這個復雜對象不會被文件流寫到磁盤裏。
synchronized
同步關鍵字,當你的對象被實現化後,裏面的方法可能被多個線程調用,這在web環境下很常見,如果希望為方法加個鎖,讓方法一個一個線程排隊執行,最簡單的方法就是加synchronized關鍵字,它可以保持這個方法同一時刻只有一個線程執行它。
/** * 方法強制為同步方法. */ synchronized void queue() { try { System.out.println("print synchronized result:" + LocalDateTime.now().toString()); Thread.sleep(5000); } catch (Exception ex) { } } @Test public void synchronizedTest() throws Exception { for (int i = 0; i < 5; i++) { new Thread(() -> queue()).start(); } Thread.sleep(500000); }
運行的結果如下,它總會被阻塞4秒鐘,沒有任務兩個線程打印的時間相同。
print synchronized result:2018-12-13T14:31:13.010
print synchronized result:2018-12-13T14:31:18.015
print synchronized result:2018-12-13T14:31:23.018
print synchronized result:2018-12-13T14:31:28.023
print synchronized result:2018-12-13T14:31:33.028
transient和synchronized的使用