国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學院 > 開發(fā)設計 > 正文

對Java同步一些理解

2019-11-18 13:55:03
字體:
來源:轉載
供稿:網(wǎng)友

  對java同步一些理解
kingfish 2005
------------------------------------------------------------
基本概念:
每個Object都會有1個鎖.
同步就是串行使用一些資源.

(說明:以下有些例子為了突出重點,省略了不必要的代碼.非凡是省掉了一些成員變量,就是需要同步的對象.)

1. 多線程中對共享、可變的數(shù)據(jù)進行同步.
對于函數(shù)中的局部變量沒必要進行同步.
對于不可變數(shù)據(jù),也沒必要進行同步.

多線程中訪問共享可變數(shù)據(jù)才有必要.


2. 單個線程中可以使用synchronized,而且可以嵌套,但無意義.
class Test {
public static void main(String[] args) {
Test t = new Test();
synchronized(t) {
synchronized(t) {
System.out.PRintln("ok!");
}
}
}
}

3. 對象實例的鎖
class Test{
public synchronized void f1(){
//do something here
}

public void f2(){
synchronized(this){
//do something here
}
}
}

上面的f1()和f2()效果一致, synchronized取得的鎖都是Test某個實列(this)的鎖.
比如: Test t = new Test();
線程A調用t.f2()時, 線程B無法進入t.f1(),直到t.f2()結束.

作用: 多線程中訪問Test的同一個實例的同步方法時會進行同步.

4. class的鎖
class Test{
final static Object o= new Object();

public static synchronized void f1(){
//do something here
}

public static void f2(){
synchronized(Test.class){
//do something here
}
}

public static void f3(){
try {
synchronized (Class.forName("Test")) {
//do something here
}
}
catch (ClassNotFoundException ex) {
}
}

public static void g(){
synchronized(o){
//do something here
}
}
}

上面f1(),f2(),f3(),g()效果一致
f1(),f2(),f3()中synchronized取得的鎖都是Test.class的鎖.

g()是自己產(chǎn)生一個對象o,利用o的鎖做同步
作用: 多線程中訪問此類或此類任一個實例的同步方法時都會同步. singleton模式lazily initializing屬于此類.

5. static method
class Test{
private static int v = 0;

public static void f1(){
//do something, 但函數(shù)中沒用用到v
}

public synchronized static void f2(){
//do something, 函數(shù)中對v進行了讀/寫.
}
}

多線程中使用Test的某個實列時,
(1) f1()是線程安全的,不需要同步
(2) f2()這個靜態(tài)方法中使用了函數(shù)外靜態(tài)變量,所以需要同步.

6. 對線程的run()進行同步?jīng)]有意義,如 public synchronized void run()

發(fā)表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發(fā)表
主站蜘蛛池模板: 含山县| 白城市| 绥德县| 岑溪市| 通州区| 旬邑县| 绥德县| 乌拉特前旗| 太和县| 嘉黎县| 农安县| 杨浦区| 德格县| 西峡县| 漳平市| 扶余县| 广东省| 都安| 祁阳县| 泰宁县| 鲁甸县| 无棣县| 普兰县| 兴国县| 泰来县| 衡南县| 天水市| 如东县| 从化市| 章丘市| 班戈县| 黔江区| 龙山县| 宜都市| 江陵县| 那曲县| 中超| 西丰县| 通城县| 华阴市| 河西区|