面試問題: 下面的方法是否線程安全?怎樣讓它成為線程安全的方法? 本篇文章將解釋一個常見的面試題,該問題被谷歌和很多其它公司問起過。它涉及的相對比較初級,而不是關於怎樣去設計復雜的並發程序。 首先,這個問題的答案是No,因為counter++操作不是一個原子操作,而是由多個 ...
Java之前有一個api方法可以直接關閉線程,stop ,由於這個方法是強制性地關閉線程,有的時候會發生錯誤,之后就取消了,現在可用的方法主要有兩種: 在線程中加入一個成員變量,當一個flag使用。在線程run 方法中輪流去檢查這個變量,變量變化時就退出這個線程。代碼示例如下: public class StopThread extends Thread private boolean run t ...
2014-10-07 17:29 0 22611 推薦指數:
面試問題: 下面的方法是否線程安全?怎樣讓它成為線程安全的方法? 本篇文章將解釋一個常見的面試題,該問題被谷歌和很多其它公司問起過。它涉及的相對比較初級,而不是關於怎樣去設計復雜的並發程序。 首先,這個問題的答案是No,因為counter++操作不是一個原子操作,而是由多個 ...
對於一些定時任務或者網絡請求服務將會使用線程池,當應用停機時需要正確安全的關閉線程池,如果處理不當,可能造成數據丟失,業務請求結果不正確等問題。 關閉線程池我們可以選擇什么都不做,JVM 關閉時自然的會清除線程池對象。當然這么做,存在很大的弊端,線程池中正在執行執行的線程以及隊列中還未執行任務 ...
轉載Fromjava 優雅的終止線程 Java中原來在Thread中提供了stop()方法來終止線程,但這個方法是不安全的,所以一般不建議使用。《Java多線程模式》中有一種叫Two-Phase Termination(兩步終止)的模式可以優雅的終止線程。 首先在線程中設置一個標志位 ...
問題說明 今天發現了一個問題,顛覆了我之前對關閉線程池的認識。 一直以來,我堅信用shutdown + awaitTermination關閉線程池是最標准的方式。 不過,這次遇到的問題是,子線程用到BufferedReader,而BufferedReader 的readLine是阻塞 ...
線程安全的實現方法 什么是線程安全? 線程安全:《JVM的高性能與最佳實踐》有說,“多個線程訪問同一個對象,如果我們不用考慮線程運行時的調度和交替執行,不用做額外的同步,或者在調用時候不用進行協調操作,調用的結果總是正確的結果,那么這個對象是線程安全的” 線程安全的對象具有以下特征:對象 ...
1. 數據不共享的情況 在探討數據共享的話題前,先來看看數據不共享的情況,每一個線程里面的數據都是獨立的,就像下面的例子,3個線程,每一個線程自己對自己的數據進行扣減,直到0為止 運行結果: 2. 數據共享的情況 這里有一段測試代碼,看看共享數據的結構,按照理 ...
轉自http://blog.csdn.net/xiao__gui/article/details/8934832 線程安全就是多線程訪問時,采用了加鎖機制,當一個線程訪問該類的某個數據時,進行保護,其他線程不能進行訪問直到該線程讀取完,其他線程才可使用。不會出現數據不一致或者數據污染。 線程 ...
ArrayList和Vector有什么區別?HashMap和HashTable有什么區別?StringBuilder和StringBuffer有什么區別?這些都是Java面試中常見的基礎問題。面對這樣的問題,回答是:ArrayList是非線程安全的,Vector是線程安全的;HashMap是非線程 ...