線程死鎖問題

 1 package com.demo.bingfa;
 2 
 3 /**
 4  * java并發編程中,死鎖的概念
 5  *
 6  * 我們啟用了兩個線程,分別搶占2個資源,但這兩個資源又分別被不同的對象(字符串)鎖住了。
 7  * 當第一個線程調用 resource1 方法,進入同步塊,拿到鎖,并等待 1 秒鐘讓另一個線程進入
 8  * resource2 同步塊,當第二個線程進入同步塊后,注意:此時, 拿著 resourec1 鎖的線程企
 9  * 圖拿到 resource2 的鎖,但這個時候,拿著 resource2 的線程也想去拿 resource1 的鎖。于
10  * 是就出現了互相僵持的情況,誰也無法拿到對方的鎖,整個系統就卡死了。
11  */
12 public class DeadLock {
13     public static void main(String[] args) {
14         //lambda表達式,
15         //啟動一個線程去獲取資源1。
16         Thread thread1 = new Thread(() -> {
17             try {
18                 new DeadLock().resource1();
19             } catch (InterruptedException e) {
20                 e.printStackTrace();
21             }
22         });
23         thread1.setName("線程1");
24         thread1.start();
25 
26         //啟動另一個線程去獲取資源2.
27         Thread thread2 = new Thread(() -> {
28             try {
29                 new DeadLock().resource2();
30             } catch (InterruptedException e) {
31                 e.printStackTrace();
32             }
33         });
34         thread2.setName("線程2");
35         thread2.start();
36     }
37 
38     void resource1() throws InterruptedException{
39         synchronized ("resource1"){
40             System.out.println("獲取資源1");
41             //等待1秒,讓另外一個線程獲取資源
42             Thread.sleep(1 * 1000);
43             resource2();
44         }
45     }
46 
47      void resource2() throws InterruptedException{
48          synchronized ("resource2"){
49              System.out.println("獲取資源2");
50              //等待1秒,讓另外一個線程獲取資源
51              Thread.sleep(1 * 1000);
52              resource1();
53          }
54     }
55 }

我們以后在線上的話,怎么去查找線程死鎖的問題呢?

1:jps命令。線程號,類名

?

2:jstack? 打印進程棧的信息

?

轉載于:https://www.cnblogs.com/bulrush/p/10766929.html

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/249072.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/249072.shtml
英文地址,請注明出處:http://en.pswp.cn/news/249072.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

CSS的4個簡寫

CSS的4個簡寫 2010-12-13 18:50 聶微東 閱讀(1547) 評論(3) 編輯 收藏 1.background 簡寫屬性在一個聲明中設置所有的背景屬性: background-colorbackground-imagebackground-repeatbackground-attachmentbackground-position 例如: background: #444444 url(image.png…

spring boot 整合 (全)

參考: https://github.com/spring-projects/spring-boot/tree/master/spring-boot-samples轉載于:https://www.cnblogs.com/lshan/p/9924005.html

使用PM2搭建在線vue.js開發環境(以守護進程方式熱啟動)

項目以vue.jslayUI的作為前端開發技術棧,需要有一個在線的環境供項目成員實時查看效果,總不能每次都webpack打包發布后才能看到效果吧!剛開始就簡單使用npm run dev命令熱啟動,但是shell命令窗口退出后,熱啟動也就失效…

微信小程序工具類

wechat-common-sdk ? 場景:目前工作中的項目需要包含并使用另一個項目。 也許是第三方庫,或者你獨立開發的,用于多個父項目的庫。 現在問題來了:你想要把它們當做兩個獨立的項目,同時又想在一個項目中使用另一個。 我…

zabbix實現mysql數據庫的監控

先來介紹zabbix中幾個常用的術語: 主機(host): 要監控的網絡設備,可由ip或DNS名稱指定。 主機組(host group): 主機的邏輯容器,可以包含主機和模板&#xff…

VSCode配合eslint進行JavaScript質量檢查

寫在開始前:如有不準確的地方希望大家提出,文章可以改知識不能錯。 創建一個項目 這里已node項目為例 npm init 根據提示填寫相關信息 安裝eslint npm install eslint --save也可以全局安裝 npm install eslint -g初始化 eslint文件 eslint --init執行命…

未找到導入的項目,請確認 Import 聲明中的路徑正確

VS2017打開以前vs版本開發的項目 <Import Project"$(MSBuildBinPath)\Microsoft.CSharp.targets" /> <Import Project"$(MSBuildExtensionsPath)\Microsoft\VisualStudio\v12.0\WebApplications\Microsoft.WebApplication.targets" /> 修改V12…

修改Jupyter的工作空間

修改Jupyter的工作空間 1、安裝Jupyter Notebook 剛安裝完并配置好Sublime Text 3后被學長推薦使用Jupyter notebook&#xff0c;于是就想著看看試試有沒有他說的那么好。 安裝&#xff1a;命令行直接pip install jupyter(前提是先安裝好了python和pip) 2、安裝完后困惑 這么大…

bzoj [Usaco2009 Hol]Cattle Bruisers 殺手游戲

Description Input 第1行輸入N&#xff0c;R&#xff0c;BX&#xff0c;BY, BVX&#xff0c;BVY&#xff0c;之后N行每行輸入四個整數Xi&#xff0c;Yi&#xff0c;VXi&#xff0c;VYi&#xff0e; Output 一個整數&#xff0c;表示在逃脫過程中&#xff0c;某一個時刻最多有這…

Visual Studio Code 使用 ESLint 增強代碼風格檢查 - gyzhao - 博客園

前言 在團隊協作開發中&#xff0c;為了統一代碼風格&#xff0c;避免一些低級錯誤&#xff0c;應該設有團隊成員統一遵守的編碼規范。很多語言都提供了Lint工具來實現這樣的功能&#xff0c;JavaScript也有類似的工具&#xff1a;ESLint。除了可以集成到構建工具中(如&#x…

CS 325 HW

代做CS 325作業、代寫C, C/Python編程設計作業、代做Python/c實驗作業CS 325 – HW 51. (6 points) Consider an undirected graph G(V,E) with nonnegative edge weights w(u,v)0. Supposethat you have computed a minimum spanning tree G, and that you have also computed…

express下使用ES6 - dtdxrk - 博客園

express下使用ES6 1 2 3 4 5 6 7 8 9 //環境切換配置 package.json scripts:{ "service": "NODE_ENVproduction PORT3000 npm start" } //node js判斷 var app express(); app.get(env) production 原文地址&#xff1a;https://segmentfault.com/a…

java中的內部類詳解

https://www.cnblogs.com/dolphin0520/p/3811445.html https://www.cnblogs.com/chenssy/p/3388487.html轉載于:https://www.cnblogs.com/codeLei/p/9934195.html

eclipse下使用git插件上傳代碼至github

eclipse下使用git插件上傳代碼至github 1.eclipse下安裝git 正常情況下&#xff0c;eclipse 是自帶 git 插件的&#xff0c;那么即可跳至步驟1的最后一小步&#xff0c;配置 git 。 如果十分悲劇&#xff0c;你的 eclipse 中見不到 git 的身影&#xff0c;那么也沒關系&#…

VS(C++)配置Halcon(一次配置,永久使用)

【說明】只需配置一次&#xff0c;以后新項目無需再次配置。 本教程是64位版本&#xff0c;32位可參考本教程。VS與Halcon無論哪個版本&#xff0c;都可參考本教程。 【步驟】以VS2015Halcon18.11為例 1、新建一個C|Win32控制臺應用程序項目 2、視圖|其他窗口|屬性管理器 在 De…

(轉)msys2使用教程

一、安裝 官方下載地址 http://www.msys2.org/ 指定好安裝路徑&#xff08;一般D根目錄即可&#xff09;&#xff0c;一路下一步就好。 二、配置國內鏡像、設置窗體修改顏色 使用[清華大學開源軟件鏡像站]中的地址&#xff0c;修改\etc\pacman.d目錄下的三個文件。 配置教程 ht…

簡單使用Git和Github來管理自己的代碼和讀書筆記

簡單使用Git和Github來管理自己的代碼和讀書筆記 以前不知道使用代碼管理工具&#xff0c;最后寫的一些東西都沒有了&#xff0c;由于硬盤壞了或者不小心格式化了之類的&#xff0c;后來使用了Git 和Github來托管自己的代碼和讀書筆記方便了不少&#xff0c;到哪里只要有網就可…

android 資源

在進行APP開發的過程當中&#xff0c;會用到許多資源&#xff0c;比如&#xff1a;圖片&#xff0c;字符串等。現對android資源知識進行簡單記錄。 具體的詳細信息及用法&#xff0c;點擊查看官方文檔 分類 一般android資源分為可直接訪問的系統資源和不可直接訪問的原生資源 r…

virtualbox 采用 NAT 還是 BRIDGE

正如標題所言&#xff0c;其實這兩個都可以讓虛擬機上網&#xff0c;但是還是有些差別的。 選擇NAT的話&#xff0c; 虛擬機之間無法PING通 虛擬機可以PING通主機 主機無法PING通虛擬機 這是因為虛擬機不能在網絡里擁有自己的IP&#xff0c;它是借助主機才能上網。 選擇橋接的話…

vue 集成html5 plus - 懶懶de尐彪 - 博客園

首先要安裝一個包 vue-html5plus npm i vue-html5plus -S 然后配置這個文件 在main.js添加一串代碼 var onPlusReady function (callback, context this) { if (window.plus) { callback.call(context) } else { document.addEventListener(plusready, callback.bind(cont…