今天就跟大家聊聊有关怎么在Java中实现多线程死锁,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。
1. 简单,只需理解基本的概念,就可以编写适合于各种情况的应用程序;2. 面向对象;3. 分布性,Java是面向网络的语言;4. 鲁棒性,java提供自动垃圾收集来进行内存管理,防止程序员在管理内存时容易产生的错误。;5. 安全性,用于网络、分布环境下的Java必须防止病毒的入侵。6. 体系结构中立,只要安装了Java运行时系统,就可在任意处理器上运行。7. 可移植性,Java可以方便地移植到网络上的不同机器。8.解释执行,Java解释器直接对Java字节码进行解释执行。
具体如下:
package com.damlab.fz;
public class DeadLock {
public static void main(String[] args) {
Resource r1 = new Resource();
Resource r2 = new Resource();
// 每个线程都拥有r1,r2两个对象
Thread myTh2 = new MyThread1(r1, r2);
Thread myTh3 = new MyThread2(r1, r2);
myTh2.start();
myTh3.start();
}
}
class Resource {
private int i;
}
class MyThread1 extends Thread {
private Resource r1, r2;
public MyThread1(Resource r1, Resource r2) {
this.r1 = r1;
this.r2 = r2;
}
@Override
public void run() {
while (true) {
// 先获得r1的锁,再获得r2的锁
synchronized (r1) {
System.out.println("1号线程获取了r1的锁");
synchronized (r2) {
System.out.println("1号线程获取了r2的锁");
}
}
}
}
}
class MyThread2 extends Thread {
private Resource r1, r2;
public MyThread2(Resource r1, Resource r2) {
this.r1 = r1;
this.r2 = r2;
}
@Override
public void run() {
while (true) {
// 先获得r2的锁,再获得r1的锁
synchronized (r2) {
System.out.println("2号线程获取了r2的锁");
synchronized (r1) {
System.out.println("2号线程获取了r1的锁");
}
}
}
}
}
运行结果:
看完上述内容,你们对怎么在Java中实现多线程死锁有进一步的了解吗?如果还想了解更多知识或者相关内容,请关注亿速云行业资讯频道,感谢大家的支持。
亿速云「云服务器」,即开即用、新一代英特尔至强铂金CPU、三副本存储NVMe SSD云盘,价格低至29元/月。点击查看>>
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。