A. 線程安全 問題 如何判斷一個類是否是線程安全的
servlet是單列的,如果有實例變數的,對它修改就會產生線程安全問題!
打比方多個線程同時對這個變數修改結果就不正確了。sessionfactroy的話一般用threadlocal實現的,一個線程一個sessionfactory,所以線程安全的。session如果當成實列變數的話就是非線程安全了。
反正一句話單列
共享,對其修改就是要考慮線程安全,一半會加鎖。至於線程安全的話就是看自己是怎麼實現的
B. Java中關於static成員方法的線程安全問題
都同時調用了,怎麼還不是多線環境下呢?但是就算是同時調用,如果沒有共享變數,有共享變數,但變數是final(引用類型除外)或者是線程安全類(Concurrent包下的,也可以)就不會存在並發問題。
public
class
TestUtil()
{
private
static
int
i
=
0
public
static
int
a
(){
return
i++;//會有並發問題
}
public
static
int
b()
{
int
i
=
0;
return
i++;//不會有並發問題
}
}
方法是否存在並發問題,判斷是否有競態條件就好了
C. 如何判斷PHP 是線程安全還是非線程安全的
判斷PHP 是線程安全還是非線程安全:
1.通過phpinfo(); 查看其中的 Thread Safety 項,這個項目就是查看是否是線程安全,如果是:enabled,一般來說應該是ts版,否則是nts版。
2.命令行:php -i|grep -i thread
結果:Thread Safety => disabled 【disabled表示非線程安全】
如果沒有grep命令(windows),那就一個個找吧。
D. servlet是不是線程安全的
不是線程安全的,因為它採用多線程方式運行其service方法.也就是說,當多個用戶並發訪問的時候,可能存在線程交互的問題. 所以我們應該將servlet里寫入的同步代碼塊寫上Synchorazid關鍵字.可是這樣就會造成資源的浪費,所以應該盡量減少同步代碼塊.
E. 怎麼判斷一個對象是否是線程安全的
Servlet是單列的,如果有實例變數的,對它修改就會產生線程安全問題! 打比方多個線程同時對這個變數修改結果就不正確了。SessionFactroy的話一般用Threadlocal實現的,一個線程一個SessionFactory,所以線程安全的。Session如果當成實列變數的話就是非線程安全了。
反正一句話單列 共享,對其修改就是要考慮線程安全,一半會加鎖。至於線程安全的話就是看自己是怎麼實現的
F. 如何判斷 Java 線程並發的安全性
總的結論:java是線程安全的,即對任何方法(包括靜態方法)都可以不考慮線程沖突,但有一個前提,就是不能存在全局變數。如果存在全局變數,則需要使用同步機制。
如下通過一組對比例子從頭講解:
在多線程中使用靜態方法會發生什麼事?也就是說多線程訪問同一個類的static靜態方法會發生什麼事?是否會發生線程安全問題?
public class Test {
public static void operation(){
// ... do something
}
}
事實證明只要在靜態函數中沒有處理多線程共享數據,就不存在著多線程訪問同一個靜態方法會出現資源沖突的問題。下面看一個例子:
public class StaticThread implements Runnable {
@Override
public void run() {
// TODO Auto-generated method stub
StaticAction.print();
}
public static void main(String[] args) {
for (int i = 0; i < 100; i++) {
new Thread(new StaticThread()).start();
}
}
}
public class StaticAction {
public static int i = 0;
public static void print() {
int sum = 0;
for (int i = 0; i < 10; i++) {
System.out.print("step " + i + " is running.");
sum += i;
}
if (sum != 45) {
System.out.println("Thread error!");
System.exit(0);
}
System.out.println("sum is " + sum);
G. 怎麼判斷一個類是否線程安全
線程安全性
類要成為線程安全的,首先必須在單線程環境中有正確的行為。如果一個類實現正確(這是說它符合規格說明的另一種方式),那麼沒有一種對這個類的對象的操作序列(讀或者寫公共欄位以及調用公共方法)可以讓對象處於無效狀態,觀察到對象處於無效狀態、或者違反類的任何不可變數、前置條件或者後置條件的情況。
此外,一個類要成為線程安全的,在被多個線程訪問時,不管運行時環境執行這些線程有什麼樣的時序安排或者交錯,它必須仍然有如上所述的正確行為,並且在調用的代碼中沒有任何額外的同步。其效果就是,在所有線程看來,對於線程安全對象的操作是以固定的、全局一致的順序發生的。
正確性與線程安全性之間的關系非常類似於在描述 ACID(原子性、一致性、獨立性和持久性)事務時使用的一致性與獨立性之間的關系:從特定線程的角度看,由不同線程所執行的對象操作是先後(雖然順序不定)而不是並行執行的。