亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

java線程死鎖代碼示例

 更新時(shí)間:2017年11月24日 08:38:17   作者:rese-t  
這篇文章主要介紹了java線程死鎖代碼示例,分享了一個(gè)簡單線程死鎖的例子,需要的朋友可以參考下。

死鎖是操作系統(tǒng)層面的一個(gè)錯誤,是進(jìn)程死鎖的簡稱,最早在 1965 年由 Dijkstra 在研究銀行家算法時(shí)提出的,它是計(jì)算機(jī)操作系統(tǒng)乃至整個(gè)并發(fā)程序設(shè)計(jì)領(lǐng)域最難處理的問題之一。

事實(shí)上,計(jì)算機(jī)世界有很多事情需要多線程方式去解決,因?yàn)檫@樣才能最大程度上利用資源,才能體現(xiàn)出計(jì)算的高效。但是,實(shí)際上來說,計(jì)算機(jī)系統(tǒng)中有很多一次只能由一個(gè)進(jìn)程使用的資源的情況,例如打印機(jī),同時(shí)只能有一個(gè)進(jìn)程控制它。在多通道程序設(shè)計(jì)環(huán)境中,若干進(jìn)程往往要共享這類資源,而且一個(gè)進(jìn)程所需要的資源還很有可能不止一個(gè)。因此,就會出現(xiàn)若干進(jìn)程競爭有限資源,又推進(jìn)順序不當(dāng),從而構(gòu)成無限期循環(huán)等待的局面。我們稱這種狀態(tài)為死鎖。簡單一點(diǎn)描述,死鎖是指多個(gè)進(jìn)程循環(huán)等待它方占有的資源而無限期地僵持下去的局面。很顯然,如果沒有外力的作用,那么死鎖涉及到的各個(gè)進(jìn)程都將永遠(yuǎn)處于封鎖狀態(tài)。

文件名:DeadThreadByExtend.java

注:

1、起線程的時(shí)候用的是start方法,run方法也可以調(diào)用,但是僅僅相當(dāng)于普通調(diào)用,在當(dāng)前線程內(nèi)執(zhí)行。

2、synchronized 不能直接修飾變量。

3、synchronized 塊并不會強(qiáng)制塊內(nèi)變量的單線程訪問。僅僅意味著在執(zhí)行塊內(nèi)語句時(shí)鎖住synchronized (args)的參數(shù),直到執(zhí)行結(jié)束才釋放。

package com.ycf.study.thread;
class Sources{
	int a;
	public void setA(int x) {
		synchronized (this) {
			this.a = x;
			try {
				Thread.sleep(2000);
			}
			catch (InterruptedException e) {
				e.printStackTrace();
			}
		}
	}
}
public class DeadThreadByExtend {
	public static void main(String[] args) {
		Sources s1 = new Sources();
		Sources s2 = new Sources();
		class MyThread1 extends java.lang.Thread {
			@Override
			      public void run() {
				System.out.println("線程1開始");
				synchronized (s1) {
					System.out.println("線程1申請修改s1");
					s1.setA(20);
					System.out.println("線程1修改完成");
					System.out.println("線程1申請修改s2");
					s2.setA(10);
					System.out.println("線程1修改s2完成");
				}
				System.out.println("線程1退出并釋放鎖++++++++++");
			}
		}
		class MyThread2 extends java.lang.Thread {
			@Override
			      public void run() {
				System.out.println("線程2開始");
				synchronized (s2) {
					System.out.println("線程2申請修改s2");
					s2.setA(20);
					System.out.println("線程2修改s2完成");
					System.out.println("線程2申請修改s1");
					s1.setA(10);
					System.out.println("線程2修改s1完成");
				}
				System.out.println("線程2退出并釋放鎖++++++++++");
			}
		}
		MyThread1 mt1 = new MyThread1();
		MyThread2 mt2 = new MyThread2();
		mt1.start();
		mt2.start();
	}
}

總結(jié)

以上就是本文關(guān)于java線程死鎖代碼示例的全部內(nèi)容,希望對大家有所幫助。如有不足之處,歡迎留言指出。感謝朋友們對本站的支持。

相關(guān)文章

  • SpringBoot異步與事務(wù)一起使用的問題解決

    SpringBoot異步與事務(wù)一起使用的問題解決

    本文主要介紹了SpringBoot異步與事務(wù)一起使用的問題解決,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2023-04-04
  • 詳解SpringCloud新一代網(wǎng)關(guān)Gateway

    詳解SpringCloud新一代網(wǎng)關(guān)Gateway

    SpringCloud Gateway是Spring Cloud的一個(gè)全新項(xiàng)目,Spring 5.0+ Spring Boot 2.0和Project Reactor等技術(shù)開發(fā)的網(wǎng)關(guān),它旨在為微服務(wù)架構(gòu)提供一種簡單有效的統(tǒng)一的API路由管理方式
    2021-06-06
  • maven <repositories>標(biāo)簽和<pluginRepositories>標(biāo)簽的使用

    maven <repositories>標(biāo)簽和<pluginRepositories>標(biāo)簽的使用

    這篇文章主要介紹了maven <repositories>標(biāo)簽和<pluginRepositories>標(biāo)簽的使用,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-07-07
  • Spring打包jar包時(shí)jsp頁面無法訪問問題解決

    Spring打包jar包時(shí)jsp頁面無法訪問問題解決

    這篇文章主要介紹了Spring打包jar包時(shí)jsp頁面無法訪問問題解決,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2020-05-05
  • 詳解Java中Period類的使用方法

    詳解Java中Period類的使用方法

    Period類通過年、月、日相結(jié)合來描述一個(gè)時(shí)間量,最高精度是天。本文將通過示例詳細(xì)為大家講講Period類的使用,需要的可以參考一下
    2022-05-05
  • Java編程思想對象的容納實(shí)例詳解

    Java編程思想對象的容納實(shí)例詳解

    這篇文章主要介紹了Java編程思想對象的容納實(shí)例詳解,內(nèi)容比較詳細(xì),涵蓋的東西也比較多,具有參考價(jià)值,需要的朋友了解下。
    2017-09-09
  • SpringBoot Redis用注釋實(shí)現(xiàn)接口限流詳解

    SpringBoot Redis用注釋實(shí)現(xiàn)接口限流詳解

    Redis 除了做緩存,還能干很多很多事情:分布式鎖、限流、處理請求接口冪等性。。。太多太多了~今天想和小伙伴們聊聊用 Redis 處理接口限流,這也是最近的 項(xiàng)目涉及到這個(gè)知識點(diǎn)了,我就拎出來和大家聊聊這個(gè)話題
    2022-07-07
  • SpringBoot打包成Docker鏡像的幾種實(shí)現(xiàn)方式

    SpringBoot打包成Docker鏡像的幾種實(shí)現(xiàn)方式

    Spring Boot是一個(gè)用于構(gòu)建獨(dú)立的、可執(zhí)行的Spring應(yīng)用程序的框架,結(jié)合使用Spring Boot和Docker,可以方便地將應(yīng)用程序部署到不同的環(huán)境中本文,主要介紹了SpringBoot打包成Docker鏡像的幾種實(shí)現(xiàn)方式,感興趣的可以了解一下
    2024-01-01
  • 你真的了解Java的多線程方法嗎

    你真的了解Java的多線程方法嗎

    這篇文章主要為大家詳細(xì)介紹了Java的多線程方法,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下,希望能夠給你帶來幫助
    2022-03-03
  • SpringBoot中動態(tài)注入Bean的技巧分享

    SpringBoot中動態(tài)注入Bean的技巧分享

    在 Spring Boot 開發(fā)中,動態(tài)注入 Bean 是一種強(qiáng)大的技術(shù),它允許我們根據(jù)特定條件或運(yùn)行時(shí)環(huán)境靈活地創(chuàng)建和管理 Bean,本文將介紹 Spring Boot 中三種動態(tài) Bean 注入技巧,需要的可以參考一下
    2025-06-06

最新評論