死鎖的誕生,寫一個簡單的死鎖例項
在實際程式設計中,要儘量避免出現死鎖的情況,但是讓你故意寫一個死鎖的程式時似乎也不太簡單(有公司會出這樣的面試題),以下是一個簡單的死鎖例子。
執行緒的同步化可能會造成死鎖,死鎖發生在兩個執行緒相互持有對方正在等待的東西(實際是兩個執行緒共享的東西)。只要有兩個執行緒和兩個物件就可能產生死鎖。
/**
* 一個簡單的死鎖類
* 當DeadLock類的物件flag==1時(td1),先鎖定o1,睡眠500毫秒
* 而td1在睡眠的時候另一個flag==0的物件(td2)執行緒啟動,先鎖定o2,睡眠500毫秒
* td1睡眠結束後需要鎖定o2才能繼續執行,而此時o2已被td2鎖定;
* td2睡眠結束後需要鎖定o1才能繼續執行,而此時o1已被td1鎖定;
* td1、td2相互等待,都需要得到對方鎖定的資源才能繼續執行,從而死鎖。
*/
package 測試包; public class deadLock implements Runnable{ public int flag=1; private static Object o1=new Object(), o2=new Object(); @Override public void run() { System.out.println("falg is"+flag); if(flag==1){ synchronized (o1) { try { Thread.sleep(500); } catch (InterruptedException e) { // TODO Auto-generated catch block e.printStackTrace(); } synchronized (o2) { System.out.println("flag 1 is running"); } } } if(flag==0){ synchronized (o2) { try { Thread.sleep(500); } catch (InterruptedException e) { // TODO Auto-generated catch block e.printStackTrace(); } synchronized (o1) { System.out.println("flag 1 is running"); } } } } public static void main(String[] args) { deadLock deadLock1 = new deadLock(); deadLock deadLock2 = new deadLock(); deadLock1.flag=1; deadLock2.flag=0; new Thread(deadLock1).start(); new Thread(deadLock2).start(); } //造成死鎖 }
相關推薦
死鎖的誕生,寫一個簡單的死鎖例項
在實際程式設計中,要儘量避免出現死鎖的情況,但是讓你故意寫一個死鎖的程式時似乎也不太簡單(有公司會出這樣的面試題),以下是一個簡單的死鎖例子。執行緒的同步化可能會造成死鎖,死鎖發生在兩個執行緒相互持有對方正在等待的東西(實際是兩個執行緒共享的東西)。只要有兩個執行緒和兩個物件
java多執行緒上機題,寫一個簡單的死鎖程式
下面是一個非常簡單的會出現死鎖的程式: */package com.richinfo.cn.thread; /** * @author : Allen(Wu Zhiwei) * @date 建立
初學javascript,寫一個簡單的階乘算法當作練習
info 學java 簡單的 png 練習 分享圖片 write img var 代碼如下: <script> var a = prompt("請輸入值"); function mul(a){ if(a==1){ return 1; }
spring tool suite新建spring starter project,寫一個簡單的html頁面並執行出來
我用的spring tool suite 版本是3.8.0 剛剛使用spring tool suite 這個工具,這個工具還是挺好用的,不用再在配置檔案上花很多時間,它可以幫我們配置好。 廢話不多說,首先新建一個spring starter proj
java 線程問題,寫一個死鎖(原理:只有互相都等待對方放棄資源才會產生死鎖)
() ati ron args start print println class log package com.swift; public class DeadLock implements Runnable { private boolean flag;
併發處理:鎖,寫一個死鎖的例項和執行緒監控
鎖 鎖是一個非常有用的工具,運用的場景非常多,因為他使用起來非常的簡單,而且易於理解。但是,鎖的問題就是很可能會出現一個非常壞的事情,就是一旦造成死鎖,就會導致執行緒得不到釋放,一旦死鎖的執行緒出現的太多,就會造成系統的不可用。 一、死鎖的例子 學習掌握一個概念,最好的方法就
多執行緒程式設計(一)——寫一個簡單的死鎖
(整個九月忙著找工作,好多收穫,好多遺憾,最終結局還可以接受,技術路還很遠,再接再厲!面去哪兒網時,寫慣了演算法的我突然讓寫了幾個多執行緒程式設計,有點矇蔽,最近好好整理一下) 死鎖發生的原因: 1、
寫一個 java 死鎖玩玩
java 死鎖很容易遇到,睡不著 寫一個 死鎖 上程式碼 package cn.nokia.rso; public class DeadLock { private st
用集合寫一個簡單的隨機分組,以及集合內元素數量查詢
移除 以及 表示 元素 move spa color 查詢 println 12個人,隨機分為4組 public static void main(String[] args) { List list = new ArrayList();
寫一個簡單的python腳本來返回ip地址的掩碼,子網個數等
pypi package 多少 ask pri 1.2 bfc pty rom 如果我們想快速得到一個IP地址段有多少個ip,快速得到IP地址段的子網掩碼,或者快速得到一個IP地址的二進制,那麽可以來學習一下。本文利用python的一個IP分析模塊IPy實現,首先安裝IPy
寫一個簡單的form表單,當光標離開表單的時候表單的值發送給後臺
bsp name clas blog var tex txt rip () 1 <body> 2 <form action="index.php"> 3 <input type="text" name="txt" id="txt
寫一個簡單vue 中間件,$emit、$on
發布-訂閱模式 pre 原理 lse 取出 als new on() 訂閱 前言 使用過vue的同學大多數都知道$emit 與$on的使用。我們僅僅知道使用,有時候是完全不夠的。現在我就帶領大家寫一個簡單類似於vue空實例的中間件。 非父子組件的通信 非父子組件的通信vue
用C語言寫一個簡單的三子棋,實現玩家與電腦的對戰
原始碼: #define _CRT_SECURE_NO_WARNINGS #include <stdio.h> #include <windows.h> #include <time.h> /* 用 C 寫一個三子棋 */ //邏輯: //1. 畫
如何寫一個簡單的猜數字遊戲?60行程式碼搞定,進來轉轉吧
#define _CRT_SECURE_NO_WARNINGS 1 #include <stdio.h> void menu() { printf("******************************\n"); printf(“歡迎來到猜數
使用面向物件的程式設計思想寫一個簡單的控制檯計算器程式,放鬆一下
using System; using System.Collections.Generic; using System.Linq; using System.Text; namespace Calc
vue.js如何寫一個簡單的原生js模組,瀏覽器中的表現如何?
請點選此處輸入圖片描述瀏覽器正在逐步的支援原生JavaScript模組。Safari和Chrome的最新版本已經支援它們了,Firefox和Edge也將很快推出。如果您是一個vue.js使用者,那關於JavaScript模組一個很酷的事就是他們允許您編寫您的元件到自己的檔案中
使用 js,自己寫一個簡單的滾動條
back http 之前 fun 完全 light get ini 計算 當我們給元素加上 overflow: auto; 的時候,就會出現滾動條,然而瀏覽的不同,滾動條的樣式大不一樣,有些甚至非常醜。 於是就想著自己寫一個滾動條,大概需要弄清楚一下這幾個點: 1、滾
linux設備驅動第三篇:寫一個簡單的字符設備驅動
提示 copy flags 驅動程序 相關 clas open ugo param 在linux設備驅動第一篇:設備驅動程序簡介中簡單介紹了字符驅動,本篇簡單介紹如何寫一個簡單的字符設備驅動。本篇借鑒LDD中的源碼,實現一個與硬件設備無關的字符設備驅動,僅僅操
采用jsp頁面與java代碼分離的方式寫一個簡單的二維表
color arraylist 一個 3-9 業務 動態顯示 復雜 分層架構 方式 前提:在我們做程序時追求的是高內聚,低耦合,但是如果我們把jsp頁面的的代碼和java的代碼都放在了jsp的代碼編寫中,使java和jsp高耦合這樣的話不僅使jsp代碼頁面顯得很復雜,而
寫一個簡單的導航
utf-8 mar title shee 小圖標 list .cn display left 制作一個如下圖的導航按鈕。當鼠標移入導航欄的首頁,商店等字體時,前面的小圖標和字顏色一起變紅!代碼如下: <meta charset="UTF-8"> <