您好,登錄后才能下訂單哦!
本篇內容主要講解“Java中怎么創建自己的線程對象”,感興趣的朋友不妨來看看。本文介紹的方法操作簡單快捷,實用性強。下面就讓小編來帶大家學習“Java中怎么創建自己的線程對象”吧!
默認情況下,主線程和垃圾回收線程都是由系統創建的,但是我們需要完成自己的功能----創建自己的線程對象。
* java將線程面向對象了,形成的類就是Thread,在Thread類內部執行任務的方法叫run()
*
* 注意:如果想讓run作為任務區,必須讓他去被自動調用.我們通過執行start()方法,來開啟線程,繼而實現run方法的自動調用.
## 直接使用Thread創建線程對象
// //分析:由于我們實現的實際功能Thread類是決定不了的,所以沒有辦法將我們的功能放入Thread的run方法里
// //所以Thread的run 方法是一個空方法.如果我們想實現自己的功能,可以寫Thread類的子類,重寫run方法
當我們手動調用run的時候,他失去了任務區的功能,變成了一個普通的方法.
//當run作為一個普通方法時,內部對應的線程跟調用他的位置保持一致.
## 鎖的條件:
* 1.鎖必須是對象 普通的對象/this/字節碼文件
* 2.要被所有的線程共享
*
* 注意:字節碼文件的使用范圍太大,一般不建議使用.
空喚醒
## Lock鎖
使用步驟
1.創建ReentrantLock lock = new ReentrantLock();對象,需要注意的是多個線程必須使用同一個
2.把之前的synchronized(鎖){ 用lock.lock()替換
3.把} 用lock.unlock();替換
好處
1.不要考慮鎖對象
2.代碼看起來更加簡潔了
3.可以使用try..catch..finaly把lock.unlock放到finaly中,好處是如果該線程發生了異常,照樣可以釋放鎖
## 比較synchronized和Lock
* 1.synchronized:從jdk1.0就開始使用的同步方法-稱為隱式同步
* synchronized(鎖對象)
* {//獲取鎖 我們將鎖還可以稱為鎖旗艦或者監聽器
同步的代碼}//釋放鎖
* 2.Lock:從jdk1.5開始使用的同步方法-稱為顯示同步
* 原理:Lock本身是接口,要通過他的子類創建對象干活兒
* 使用過程:
* 首先調用lock()方法獲取鎖
* 進行同步的代碼塊兒
* 使用unlock()方法釋放鎖
* 使用的場景:
* 當進行多生產者多消費者的功能時,使用Lock,其他的都使用synchronized
* 使用效率上:Lock高于synchronized
## 多線程的單例
//餓漢式,由于公共方法中只有一行公共的代碼,所以不會產生線程安全問題
class SingleInstance1{
private static final SingleInstance1 s = new SingleInstance1();
private SingleInstance1() {
}
public static SingleInstance1 getInstance() {
return s;
}
}
//懶漢式,
class SingleInstance2{
private static SingleInstance2 s = null;
private SingleInstance2() {
}
public static SingleInstance2 getInstance() {
if (s == null) {//盡量減少線程安全代碼的判斷次數,提高效率
synchronized (SingleInstance2.class) {//使用同步代碼塊兒實現了線程安全
if (s == null) {
s = new SingleInstance2();
}
}
}
return s;
}
## 線程停止
1.通過一個標識結束線程
2.調用stop方法---因為有固有的安全問題,所以系統不建議使用.
3.調用interrupt方法----如果目標線程等待很長時間(例如基于一個條件變量),則應使用 interrupt 方法來中斷該等待。
到此,相信大家對“Java中怎么創建自己的線程對象”有了更深的了解,不妨來實際操作一番吧!這里是億速云網站,更多相關內容可以進入相關頻道進行查詢,關注我們,繼續學習!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。