最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

java線程的中斷和同步問題的實(shí)現(xiàn)

 更新時間:2024年07月18日 09:29:38   作者:魈太兇  
本文主要介紹了java線程的中斷和同步問題的實(shí)現(xiàn),文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧

1、自動終斷【完成】:一個線程完成執(zhí)行后(即run方法執(zhí)行完畢),不能再次運(yùn)行 。

2、手動中斷:

stop( ) —— 已過時,基本不用。(不安全,就像是突然停電)

interrupt( ) ——此方法只是改變中斷狀態(tài),不會中斷一個正在運(yùn)行的線程。比如:如果當(dāng)前線程是阻塞狀態(tài),那么就結(jié)束阻塞狀態(tài)

3、可通過使用一個標(biāo)志指示 run 方法退出,從而終止線程(推薦使用)

使用場景

  • 點(diǎn)擊某個桌面應(yīng)用中的取消按鈕時;
  • 某個操作超過了一定的執(zhí)行時間限制需要中止時;
  • 多個線程做相同的事情,只要一個線程成功其它線程都可以取消時;
  • 一組線程中的一個或多個出現(xiàn)錯誤導(dǎo)致整組都無法繼續(xù)時;
  • 當(dāng)一個應(yīng)用或服務(wù)需要停止時
  • interrupt( )方法說明:interrupt()方法只是改變中斷狀態(tài),不會中斷一個正在運(yùn)行的線程。這一方法實(shí)際完成的是,給受阻塞的線程發(fā)出一個中斷信號,這樣受阻線程檢查到中斷標(biāo)識,就得以退出阻塞的狀態(tài)。更確切的說,如果線程被Object.wait, Thread.join和Thread.sleep三種方法之一阻塞,此時調(diào)用該線程的interrupt()方法,那么該線程將拋出一個 InterruptedException中斷異常(該線程必須事先預(yù)備好處理此異常),從而提早地終結(jié)被阻塞狀態(tài)。如果線程沒有被阻塞,這時調(diào)用 interrupt()將不起作用,直到執(zhí)行到wait(),sleep(),join()時,才馬上會拋出 InterruptedException。

 線程同步問題

同步解決方案synchronized

1.在java語言中,引入了同步鎖的概念,每個對象都有一個與之關(guān)聯(lián)的內(nèi)部鎖(排他鎖),用以保證共享數(shù)據(jù)的安全性問題。

2.關(guān)鍵詞synchronized用來給某個方法或某段代碼加上一個同步鎖。

3.當(dāng)調(diào)用者調(diào)用此方法時,必須獲得這把鎖才可以調(diào)用。

4.當(dāng)某個調(diào)用者獲得這把鎖之后,其他調(diào)用者就無法獲得了。

5.當(dāng)調(diào)用結(jié)束后,調(diào)用者釋放這把鎖,此時其他調(diào)用者才可以獲得。

6.這個機(jī)制保障了某個同步方法同時只能有一個調(diào)用者

鎖定方法

public class Account {
    private int balance = 1000;
    public  synchronized void qu(){ // 同步方法
        if(balance>=1000){
            try {
                Thread.sleep(100);
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
            balance -= 1000;
            System.out.println("取了1000元,balance = " + balance);
        }
    }
}

 鎖定代碼塊

public class Account {
    private int balance = 1000;
    public   void qu(){
        System.out.println("Account.qu");
        synchronized( "this" ){ // 同步塊
            if(balance>=1000){
                try {
                    Thread.sleep(100);
                } catch (InterruptedException e) {
                    e.printStackTrace();
                }
                balance -= 1000;
                System.out.println("取了1000元,balance = " + balance);
            }
        }
    }
}

死鎖

線程同步的第二種解決方案 wait() notify()

生產(chǎn)者-消費(fèi)者(producer-consumer)問題,也稱作有界緩沖區(qū)(bounded-buffer)問題,兩個線程共享一個公共的固定大小的緩沖區(qū)。其中一個是生產(chǎn)者,用于將消息放入緩沖區(qū);另外一個是消費(fèi)者,用于從緩沖區(qū)中取出消息。問題出現(xiàn)在當(dāng)緩沖區(qū)已經(jīng)滿了,而此時生產(chǎn)者還想向其中放入一個新的數(shù)據(jù)項(xiàng)的情形,其解決方法是讓生產(chǎn)者此時進(jìn)行休眠,等待消費(fèi)者從緩沖區(qū)中取走了一個或者多個數(shù)據(jù)后再去喚醒它

package test06;
//倉庫(有界緩沖區(qū))
class Storage{
	private int count = 0;
	public synchronized void set(){
		if(count>=5){
			try {
				this.wait();
			} catch (InterruptedException e) {
				e.printStackTrace();
			}
		}
		count++;
		System.out.println("生產(chǎn)了一個,倉庫中有:" + count);
		this.notify();
	}
	public synchronized void get(){
		if(count<=0){
			try {
				this.wait();
			} catch (InterruptedException e) {
				e.printStackTrace();
			}
		}
		count--;
		System.out.println("消費(fèi)了一個,倉庫中有:" + count);
		this.notify();
	}
}
//生產(chǎn)者
class Producer extends Thread{
	private Storage storage;
	public Producer(Storage storage){
		this.storage = storage;
	}
	public void run(){
		for(int i=0;i<50;i++){
			this.storage.set();
		}
	}
}
//消費(fèi)者
class Customer extends Thread{
	private Storage storage;
	public Customer(Storage storage){
		this.storage = storage;
	}
	public void run(){
		for(int i=0;i<50;i++){
			this.storage.get();
		}
	}
}
public class Test2 {
	public static void main(String[] args) {
		Storage storage = new Storage();
		Producer producer = new Producer(storage);
		Customer customer = new Customer(storage);
		
		customer.start();
		producer.start();
	}
}

到此這篇關(guān)于java線程的中斷和同步問題的實(shí)現(xiàn)的文章就介紹到這了,更多相關(guān)java線程中斷和同步內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家! 

相關(guān)文章

  • Java中List<T> Map與Map List<T>的區(qū)別小結(jié)

    Java中List<T> Map與Map List<T>的區(qū)別小結(jié)

    本文主要介紹了Java中List<T> Map與Map List<T>的區(qū)別小結(jié),文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2023-08-08
  • JAVA動態(tài)代理模式(從現(xiàn)實(shí)生活角度理解代碼原理)

    JAVA動態(tài)代理模式(從現(xiàn)實(shí)生活角度理解代碼原理)

    本文主要介紹了JAVA動態(tài)代理模式(從現(xiàn)實(shí)生活角度理解代碼原理)的相關(guān)知識。具有很好的參考價(jià)值。下面跟著小編一起來看下吧
    2017-03-03
  • 關(guān)于Scanner對象的輸入結(jié)束標(biāo)記問題

    關(guān)于Scanner對象的輸入結(jié)束標(biāo)記問題

    這篇文章主要介紹了關(guān)于Scanner對象的輸入結(jié)束標(biāo)記問題,具有很好的參考價(jià)值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-05-05
  • 詳解Springboot應(yīng)用啟動以及關(guān)閉時完成某些操作

    詳解Springboot應(yīng)用啟動以及關(guān)閉時完成某些操作

    這篇文章主要介紹了詳解Springboot應(yīng)用啟動以及關(guān)閉時完成某些操作,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2018-11-11
  • SpringBoot整合sharding-jdbc實(shí)現(xiàn)自定義分庫分表的實(shí)踐

    SpringBoot整合sharding-jdbc實(shí)現(xiàn)自定義分庫分表的實(shí)踐

    本文主要介紹了SpringBoot整合sharding-jdbc實(shí)現(xiàn)自定義分庫分表的實(shí)踐,將通過自定義算法來實(shí)現(xiàn)定制化的分庫分表來擴(kuò)展相應(yīng)業(yè)務(wù),感興趣的可以了解一下
    2021-11-11
  • 最全JVM調(diào)優(yōu)步驟和參數(shù)及配置

    最全JVM調(diào)優(yōu)步驟和參數(shù)及配置

    這篇文章主要給大家介紹了關(guān)于JVM調(diào)優(yōu)的相關(guān)資料,JVM調(diào)優(yōu)是指對Java虛擬機(jī)(JVM)進(jìn)行優(yōu)化,以提高Java程序的性能和運(yùn)行效率,文中介紹的非常詳細(xì),需要的朋友可以參考下
    2024-03-03
  • 解析Idea為什么不推薦使用@Autowired進(jìn)行Field注入

    解析Idea為什么不推薦使用@Autowired進(jìn)行Field注入

    這篇文章主要介紹了Idea不推薦使用@Autowired進(jìn)行Field注入的原因,網(wǎng)上文章大部分都是介紹兩者的區(qū)別,沒有提到為什么,當(dāng)時想了好久想出了可能的原因,今天來總結(jié)一下
    2022-05-05
  • Springboot基于enable模塊驅(qū)動的實(shí)現(xiàn)

    Springboot基于enable模塊驅(qū)動的實(shí)現(xiàn)

    這篇文章主要介紹了Springboot基于enable模塊驅(qū)動的實(shí)現(xiàn),文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-08-08
  • hibernate中的對象關(guān)系映射

    hibernate中的對象關(guān)系映射

    hibernate中的ORM映射文件通常以.hbm.xml作為后綴。使用這個映射文件不僅易讀,而且可以手工修改,也可以通過一些工具來生成映射文檔,下文給大家詳細(xì)的介紹hibernate中的對象關(guān)系映射,需要的朋友參考下吧
    2017-09-09
  • spring用戶通過交互界面登錄成功的實(shí)現(xiàn)

    spring用戶通過交互界面登錄成功的實(shí)現(xiàn)

    本文主要介紹了spring用戶通過交互界面登錄成功的實(shí)現(xiàn),文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2023-07-07

最新評論

安龙县| 宁明县| 左贡县| 宿松县| 冷水江市| 通海县| 张家界市| 商水县| 浮山县| 武穴市| 蚌埠市| 开江县| 临安市| 岚皋县| 丰县| 曲靖市| 宣城市| 会宁县| 桦南县| 普宁市| 静乐县| 磐安县| 吉水县| 恩平市| 海淀区| 石楼县| 景谷| 邯郸县| 靖州| 古田县| 长泰县| 阳曲县| 温泉县| 兰西县| 武平县| 张掖市| 汶川县| 长治市| 宕昌县| 福海县| 马鞍山市|