JAVA线程死锁
文件名:DeadThreadByExtend.java
注:
1、起线程的时候用的是start方法,run方法也可以调用,但是仅仅相当于普通调用,在当前线程内执行。
2、synchronized 不能直接修饰变量。
3、synchronized 块并不会强制块内变量的单线程访问。仅仅意味着在执行块内语句时锁住synchronized (args)的参数,直到执行结束才释放。
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();
}
}
java学习群669823128
JAVA线程死锁的更多相关文章
- Java线程死锁查看分析方法
如何查看是否有Java线程死锁?下面介绍两种方法. 一.Jconsole Jconsole是JDK自带的图形化界面工具,使用JDK给我们的的工具JConsole,可以通过打开cmd然后输 ...
- java 线程死锁的检测
java 线程死锁的检测 例子程序: import java.util.concurrent.CountDownLatch; import java.util.concurrent.Executo ...
- Java——线程死锁问题
body, table{font-family: 微软雅黑; font-size: 10pt} table{border-collapse: collapse; border: solid gray; ...
- 55行代码实现Java线程死锁
死锁是Java多线程的重要概念之一,也经常出现在各大公司的笔试面试之中.那么如何创造出一个简单的死锁情况?请看代码: class Test implements Runnable { boolean ...
- 一个Java线程死锁的例子
package com.lk.B; public class Test4 { private static final Object o1 = new Object(); private static ...
- 诊断Java线程死锁
比如我们有运行这样一个程序: 了解多线程的小伙版都知道,这段代码不会有打印结果,因为发生了死锁.我们在服务器上运行试试,没有输出,对应的进程是 32752. 使用 “jstack 32752”排查,后 ...
- 【!Important】Java线程死锁查看分析方法
一.Jconsole Jconsole是JDK自带的图形化界面工具,使用JDK给我们提过的工具JConsole,可以通过cmd打开命令框然后输入Jconsole打开图形工具 然后点击检测死锁就可以查看 ...
- Java 多线程 死锁 隐性死锁 数据竞争 恶性数据竞争 错误解决深入分析 全方向举例
在几乎所有编程语言中,由于多线程引发的错误都有着难以再现的特点,程序的死锁或其它多线程错误可能只在某些特殊的情形下才出现,或在不同的VM上运行同一个程序时错误表现不同.因此,在编写多线程程序时,事先认 ...
- [改善Java代码]预防线程死锁
线程死锁DeadLock是多线程编码中最头疼的问题,也是最难重现的问题,因为Java是单进程多线程语言.
随机推荐
- 在Ubuntu上安装Chrome浏览器和ChromeDriver
启动脚本后报错 selenium.common.exceptions.WebDriverException: Message: 'chromedriver' executable may have w ...
- Codeforces Round #396 (Div. 2) D. Mahmoud and a Dictionary
地址:http://codeforces.com/contest/766/problem/D 题目: D. Mahmoud and a Dictionary time limit per test 4 ...
- Oracle数据安全(五)审计
一.审计的概念 审计是监视和记录用户对数据库所进行操作,以供DBA进行统计和分析.利用审计可以完成下列任务 保证用户能够对自己在数据库中的活动负责. 禁止用户在数据库中从事于自己职责不相符的活动 调查 ...
- Atom常用快捷键及设置
常用快捷键: cmd-z 修改历史中后退 cmd-y 修改历史中前进 ctl-shift-c 复制该聚焦文件的路径 cmd-/ 注释 shift-cmd-d 复制整行并粘贴到下一行 ctl-shift ...
- hadoop28---netty传对象
Netty中,通讯的双方建立连接后,会把数据按照ByteBuf的方式进行传输,例如http协议中,就是通过HttpRequestDecoder对ByteBuf数据流进行处理,转换成http的对象.基于 ...
- rpm命令,yum命令大全
rpm 执行安装包二进制包(Binary)以及源代码包(Source)两种.二进制包可以直接安装在计算机中,而源代码包将会由RPM自动编译.安装.源代码包经常以src.rpm作为后缀名. 常用命令组合 ...
- HTML5相册浏览插件
在线演示 本地下载
- 检索并打印一个DNS主机条目
检索并打印一个DNS主机条目的 C 程序 --- Linux/Unix /*************************************************************** ...
- 用maven创建web工程
1.打开eclipse,选择File->New->Other菜单,弹出下面的对话框,在Wizards中输入maven,会过滤出和maven相关的菜单,选中Maven Project菜单,然 ...
- 使用node-inspector调试NodeJS代码
使用node-inspector调试NodeJS代码 任何一门完备的语言技术栈都少不了健壮的调试工具,对于NodeJS平台同样如此,笔者研究了几种调试NodeJS代码的方式,通过对比,还是觉得node ...