Java——多线程(死锁)

死锁是指:两个或两个以上的进程在执行过程中,由于竞争资源或者由于彼此通信而造成的一种阻塞的现象,若无外力作用,它们都将无法推进下去。此时称系统处于死锁状态或系统产生了死锁,这些永远在互相等待的进程称为死锁进程。

同步代码块不要嵌套,因为,嵌套容易死锁,避免死锁的出现,不要进行同步代码块的嵌套

package com.yy.syn;
//只有获得到一双筷子才可以吃
public class Demo5_DeadLock {private static String s1 = "筷子1";private static String s2 = "筷子2";public static void main(String[] args) {new Thread(){                               //第一个线程Thread-0,在上面,所以,它先开启,先开始执行,执行的机会多public void run(){while(true){synchronized (s1) {         //系统先拿到s1System.out.println(getName() + "...获取" + s1 + "等待" + s2 );//之后,执行这句话synchronized (s2) {         //正准备获取s2的时候,第二条线程启动System.out.println(getName() + "...拿到" + s2 +"开吃" );}}}}}.start();new Thread(){public void run(){while(true){synchronized (s2) {         //第二条线程获取到s2System.out.println(getName() + "...获取" + s2 + "等待" + s1 );//之后,执行这句话synchronized (s1) {         //然后,再准备去获取s1,但是s1已经被第一条线程获取,第一条线程并未释放s1System.out.println(getName() + "...拿到" + s1 +"开吃" );}}}}}.start();}
}
//之后,第一条线程获得了s1,第二条线程获取了s2,第一条线程想获取s2,但是,s2被第二条线程所获取,而第二条线程想获取s1,但是s1被第一条线程所获取,所以,两条线程开始僵持,最后造成死锁
//但是,也会有一种发生概率极低的情况,一种理想状态,即 第一条线程先拿到s1然后输出一句话,然后再拿到s2输出一句话,然后再释放s1,释放s2;然后,第二条线程开始获取s2,输出,然后再获取s1,输出

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/379928.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

c# 前导0_C#| 用前导零填充整数

c# 前导0To pad an integer number with leading zero, we can use String.Format() method which is library method of String class in C#. 要用前导零填充整数,我们可以使用String.Format()方法,该方法是C#中String类的库方法。 using S…

走到尽头的技术-MVC

MVC技术是一种WebApplication设计技术,相比于传统Web应用程序,MVC可以使程序结构更加清晰,他采用 Model,View,Controller 来管理和架构我们的Web资源,将不同的请求(request)导向不同…

Search Engine -垂直搜索小汇总

FilesTube: 共享文件搜索引擎,文件来自:Rapidshare, MegaUpload, Megashares, YouSendIt, SaveFile, FileFront和Badongo等很多文件储存网站,支持的文件格式包括:AVI, MP3, MPEG, MPG, RAR, WMA, WMV, EXE, ZIP等,主要为媒体格式,不支持中文 Picsearch:专业图片搜索引擎,中文界…

Java——多线程(线程安全问题)

同步为安全,不同步为不安全;也就是有synchronized这个标识符,就为线程安全,反之,为线程不安全。 ①Vector是线程安全的 ②StringBuffer是线程安全的 ③Hashtable是线程安全的 Collections.synchronized(xxx)&#…

web安全---XSS利用平台BLUE-LOTUS安装与使用

0x01 安装 环境:windows、phpstudy 下载地址:https://gitee.com/gid1314/BlueLotus_XSSReceiver-master 下载后将文件解压,重命名为blue,放在www目录下 访问:http://IP/blue 点击安装 这里只需要修改后台登陆密码和…

C#Convert.ToInt32(bool)方法-将bool值转换为int

C#Convert.ToInt32(bool)方法 (C# Convert.ToInt32(bool) Method) Convert.ToInt32(bool) Method is used to convert a specific Boolean (bool) value to its equivalent integer (int 32 signed number). Convert.ToInt32(bool)方法用于将特定的布尔值(布尔值)转…

配置Microsoft Visual SourceSafe 2005的Internet访问

配置Microsoft Visual SourceSafe 2005的Internet访问 VSS2005发布以后,早就听说可以支持Internet访问,这是一个很有意思的特性。前两天有空,就安装配置了一下,成功访问。现在安装过程发布出来,大家共享。 步骤0&…

使用delphi 开发多层应用(十)安全访问服务器

前面讲了如何建立和访问服务器,但是前面建的服务器都没有安全控制,这里有很大的安全问题,第一是任何人做一个客户端都可以都可以访问 服务器。第二是数据在网络传输过程中都是明码的,没有加密,使用网络侦听器就可以检测到传输的内容。这是一个…

数组push()方法以及JavaScript中的示例

JavaScript push()方法 (JavaScript push() method) push() method is used adds/inserts an element at the end of an array, it returns nothing but changes the length of the array. push()方法用于在数组末尾添加/插入元素,它只返回改变数组的长度&#xff0…

C——整除的尾数

Problem Description 一个整数&#xff0c;只知道前几位&#xff0c;不知道末二位&#xff0c;被另一个整数除尽了&#xff0c;那么该数的末二位该是什么呢&#xff1f; Input 输入数据有若干组&#xff0c;每组数据包含二个整数a&#xff0c;b&#xff08;0< a<10000…

web安全---浏览器解析提交数据的过程

解码规则 html解析器对html文档进行解析&#xff0c;完成解析并创建DOM树JavaScript或者CSS解析器对内联脚本进行解析&#xff0c;完成js、css解码url解码会根据url所在的顺序不同而在JS解码或者解码后 解码顺序 html解析第一步执行&#xff0c;而JS解析和URL解析则要根据情…

commons-lang的FastDateFormat性能测试

commons-lang的FastDateFormat是一个thread-safe的&#xff0c;对SimpleDateFormat的一个重新实现。 SimpleDateFormat为什么不是thread-safe的呢&#xff1f;看一下具体实现就知道了&#xff0c;其父类中定义了成员变量Calendar&#xff0c;每次格式化日期时都会先重置这个Cal…

C——Flowers

Problem Description As you know, Gardon trid hard for his love-letter, and now he’s spending too much time on choosing flowers for Angel. When Gardon entered the flower shop, he was frightened and dazed by thousands kinds of flowers. “How can I choose!”…

include函数_include()函数以及JavaScript中的示例

include函数includes() is a predefined function in JavaScript, which is used to check whether a given element exists in the array or not? include()是JavaScript中的预定义函数&#xff0c;用于检查数组中是否存在给定元素&#xff1f; Example: 例&#xff1a; &l…

利用POI创建OpenOffice中的Excel文件

之所以称为OpenOffice的Excel文件,我发现了一个特点就是: 一些网站严格限定了文件必须为MS的Excel格式的话,用POI的HSSF创建的Excel就会不识别.不知道是什么原因,可能是版本的问题,据说HSSF(令人讨厌的电子表格格式)生成的是MS97的格式.但是97-2003的提示中明显的说明了MS的lib…

批处理文章集锦

http://www.5dmail.net/html/2005-10-17/20051017181702.htmhttp://www.cnblogs.com/glaivelee/archive/2009/10/07/1578737.html转载于:https://www.cnblogs.com/Jessy/archive/2012/02/29/2372955.html

web安全-----CSRF漏洞

简述 CSRF&#xff1a;Cross-site request -forgery&#xff0c;跨站请求伪造&#xff0c;是一种web攻击方式&#xff0c;是由于网站的cookie在浏览器中不会过期&#xff0c;只要不关闭浏览器或者退出登录&#xff0c;那以后只要访问这个网站&#xff0c;都会默认你已经登录。…

java math 类_Java Math类静态长轮(double d)示例

java math 类数学课静态长回合(双D) (Math Class static long round(double d) ) This method is available in java.lang package. 此方法在java.lang包中可用。 This method is used to return the closest long value to the given argument. 此方法用于将最接近的long值返回…

C——求平均成绩

Problem Description 假设一个班有n(n<50)个学生&#xff0c;每人考m(m<5)门课&#xff0c;求每个学生的平均成绩和每门课的平均成绩&#xff0c;并输出各科成绩均大于等于平均成绩的学生数量。 Input 输入数据有多个测试实例&#xff0c;每个测试实例的第一行包括两个…

依赖、关联、聚合、组合还有泛化的关系(转载)

依赖、关联、聚合、组合还有泛化的关系 此文为转载文章:http://zjzkiss.cnblogs.com/世界是普遍联系的&#xff0c;因此程序世界中的类&#xff0c;也不可能是孤立的。UML为我们定义了它们之间的关系&#xff0c;就是&#xff1a;依赖、关联、聚合、组合还有泛化。 泛化关系比…