A. java多線程中,如何給靜態變數(如List)加鎖/同步
使用synchronized關鍵字同步方法就可以了。
public class Foo2 {
private int x = 100;
public int getX() {
return x;
}
//同步方法
public synchronized int fix(int y) {
x = x - y;
System.out.println("線程"+Thread.currentThread().getName() + "運行結束,減少「" + y + "」,當前值為:" + x);
return x;
}
}
B. Java多線程訪問文件往文件里寫東西時加上一個鎖,
synchronized (變數){
語句
}
synchronized 方法(){
}
C. java多線程讀一個變數需要加鎖嗎
如果只是讀操作,沒有寫操作,則可以不用加鎖,此種情形下,變數加上final關鍵字;
如果有寫操作,但是變數的寫操作跟當前的值無關聯,且與其他的變數也無關聯,則可考慮變數加上volatile關鍵字,同時寫操作方法通過synchronized加鎖;
如果有寫操作,且寫操作依賴變數的當前值(如:i++),則getXXX和寫操作方法都要通過synchronized加鎖。
D. java多線程加鎖是對誰加鎖
多線程 會產生 線程安全問題;
加鎖是為了使目標 變數不能被多個線程同時訪問 而產生線程安全問題;
該變數 就是共享數據;
對共享數據加鎖能保證 線程訪問共享數據的時候,需要「排隊」----一個一個的操作該數據
從而避免了線程安全問題;
E. Java多實例多線程同步加鎖的問題
代碼寫的就有問題
因為synchronized寫在線程里了,也就是說,你new了多線程,它們都在執行自己的代碼
而並不是多線程執行同一段代碼,所以這里並沒有起到同步的作用
你應該把這個方法放到線程的外面去(放你的App這個類),讓多個線程去調用就能體現出來了
F. java給非同步線程加鎖起作用
告訴別的線程,現在「我」鎖定了,「你」等會再拿(變數)來使用