繼續上篇的總結,這次我們講執行緒同步機制
執行緒同步是為了確保執行緒安全,所謂執行緒安全指的是多個執行緒對同一資源進行訪問時,有可能產生資料不一致問題,導致執行緒訪問的資源並不是安全的。如果多執行緒程式執行結果和單執行緒執行的結果是一樣的,且相關變數的值與預期值一樣,則是執行緒安全的。
舉個簡單的例子,後邊會寫到這個例子,鐵路售票,分四個視窗賣,一共一百張,需要同步。
1.同步**塊
package com.tao.syn;
public class demo1_synchronized
}}.start();
new thread()
}}.start(); }}
class demo
class printer
} public void print2()
}}
2.同步方法
package com.tao.syn;
public class demo2_synchronized
}}.start();
new thread()
}}.start(); }}
class demo2
class printer2
public static void print2()
}}
鐵路賣票的例子package com.tao.syn;
/** *
* @author 天外飛星
* 鐵路賣票,四個視窗,一共100張
* */
public class demo3_ticket
} class ticket extends thread catch (interruptedexception e)
break;
}}
system.out.println("賣第"+ticket--+"張票");
} }}
單例設計模式
單例模式,是一種常用的軟體設計模式。在它的核心結構中只包含乙個被稱為單例的特殊類。通過單例模式可以保證系統中,應用該模式的類乙個類只有乙個例項。即乙個類只有乙個物件例項。
具體實現
需要:(1)將構造方法私有化,使其不能在類的外部通過new關鍵字例項化該類物件。
(2)在該類內部產生乙個唯一的例項化物件,並且將其封裝為private static型別。
(3)定義乙個靜態方法返回這個唯一物件。
實現一:立即載入 / 「餓漢模式」
package com.tao.thread;
public class demo2_singleton1
}class singleton1 ;
/* * 一、餓漢式(常用)
*/// 2.建立本類物件
private static singleton1 s1 = new singleton1();
// 3.對外提供公共的訪問方法
public static singleton1 getinstance()
}
實現二:延遲載入 / 「懶漢模式」package com.tao.thread;
public class demo3_singleton2
}class singleton2 ;
/* * 二、懶漢式
*/// 2.建立本類物件
private static singleton2 s1;
public static singleton2 getinstance()
return s1;
}}
實現三、final修飾方法package com.tao.thread;
/** * 三、final修飾方法
* @author 天外飛星
* */
public class demo4_singleton3 }
class singleton4;
static final singleton4 s1=new singleton4();
}
Java執行緒總結(二)
實現 sychronized 工作原理 1 任意的物件都可以作為乙個鎖物件,每一物件都有乙個內建鎖 2 某一時刻,鎖物件最多只能被乙個執行緒持有 3 執行緒獲得了鎖之後會一直持有,知道執行完同步 塊後才能釋放。4 執行緒要執行同步 塊,必須先獲得鎖物件 執行緒不安全舉例 執行緒安全問題 以下的做法會...
Java執行緒總結
在實際應用中,我們經常用到多執行緒,如車站的售票系統,車站的各個售票口相當於各個執行緒。當我們做這個系統的時候可能會想到兩種方式來實現,繼承thread類或實現runnable介面,現在看一下這兩種方式實現的兩種結果。繼承thread方式class threadtest extends thread...
Java執行緒(二)
昨天我們認識了什麼是執行緒和實現他的兩種方式,今天我們再進一步了解。執行緒的狀態轉換是執行緒控制的基礎。執行緒狀態總的可分為五大狀態 分別是生 死 可執行 執行 等待 阻塞。如下圖 上圖能夠清晰的看出執行緒見得狀態是如何轉換的,並且標註了在不同的狀態執行緒對cpu的資源使用情況。其中對執行緒操作的方...