⑴ java中Set集合的無序性需要怎樣理解
首先你要知道Set是一個介面,這個介面的約定就是存儲內容是個:無重復元素的集合
它當然就是沒有順序的
⑵ java單例雙重檢查鎖為什麼需要加volatile關鍵字
已經修改,的確應該加上volatile關鍵字。不加的情況下,假設兩個線程,線專程A正在執行instance = new Instance()的操作,屬而線程B開始執行if(instance==null)的判斷,當不存在volatile的時候,因為 new Instance()是一個非原子操作,可能發生無序寫入,構造函數可能在整個對象構造完成前執行完畢,線程B可能會看到一個不完整的instance對象,因為java的某些實現會在內存中開辟一片存儲對象的區域後直接返回內存的引用,所以線程B判斷不為null,而這時候實際上,instance的構造函數還沒有執行,從而線程b得到不完整的對象。在 Instance 的構造函數執行之前,會在內存中開辟一片存儲對象的區域後直接返回內存的引用,賦值給變數 instance,instance也就可能成為非 null 的,即賦值語句在對象實例化之前調用,此時別的線程得到的是一個還會初始化的對象,這樣會導致系統崩潰線程B可能會看到一個不完整的instance對象,因為java的某些實現,所以線程B判斷不為null。從而得到不完整的對象。
⑶ javaweb不能正常向文件中寫入數據
(1)ServletContext sc = this.getServletContext();
這句話不知道你認為this指的是什麼?一般的寫法都是從request里取ServletContext而不是從Servlet裡面取,感覺應該這樣寫才對:ServletContext sc = req.getServletContext();
(2)sc.getRealPath("result.txt"),首先要保證有這個文件,其次,如果你將其放在WEB-INF下面要寫成sc.getRealPath("\WEB-INF\result.txt");你有兩個錯誤點:1是沒有加WEB-INF這層文件夾;2是沒有在文件名的最開頭加「\」;
(3)FileWrite里可以直接寫文件路徑字元串的,不需要先轉換成File的。
(4)fw.close()不要放到try里,要放到finally里,否則萬一try里出了錯誤無法繼續執行,你的fw就關不掉了。
(5)如果你是用IDE開發的比如MyEclipse等,你要注意不要到你工程的WEB-INF下面的result.txt中去查看是否已經寫入,而是要到你的Tomcat下WEB-INF的result.txt中去看。因為最終IDE都是把工程部署到Tomcat下面去運行的,自然result.txt這個文件也會被復制到tomcat那邊去。
⑷ Java怎樣往一個文件里多次寫入數據
//我用位元組流操作文本文件
publicstaticvoidmain(String[]args)throwsException{
//此處設置為true即可追加
FileWriterout=newFileWriter("D:\1.txt",true);
//往文件寫入
out.write("abc");
//換行
out.write(" ");
//繼續內追加
out.write("def");
//刷新IO內存流容
out.flush();
//關閉
out.close();
}