文件名: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线程死锁的更多相关文章

  1. Java线程死锁查看分析方法

    如何查看是否有Java线程死锁?下面介绍两种方法. 一.Jconsole        Jconsole是JDK自带的图形化界面工具,使用JDK给我们的的工具JConsole,可以通过打开cmd然后输 ...

  2. java 线程死锁的检测

    java 线程死锁的检测   例子程序: import java.util.concurrent.CountDownLatch; import java.util.concurrent.Executo ...

  3. Java——线程死锁问题

    body, table{font-family: 微软雅黑; font-size: 10pt} table{border-collapse: collapse; border: solid gray; ...

  4. 55行代码实现Java线程死锁

    死锁是Java多线程的重要概念之一,也经常出现在各大公司的笔试面试之中.那么如何创造出一个简单的死锁情况?请看代码: class Test implements Runnable { boolean ...

  5. 一个Java线程死锁的例子

    package com.lk.B; public class Test4 { private static final Object o1 = new Object(); private static ...

  6. 诊断Java线程死锁

    比如我们有运行这样一个程序: 了解多线程的小伙版都知道,这段代码不会有打印结果,因为发生了死锁.我们在服务器上运行试试,没有输出,对应的进程是 32752. 使用 “jstack 32752”排查,后 ...

  7. 【!Important】Java线程死锁查看分析方法

    一.Jconsole Jconsole是JDK自带的图形化界面工具,使用JDK给我们提过的工具JConsole,可以通过cmd打开命令框然后输入Jconsole打开图形工具 然后点击检测死锁就可以查看 ...

  8. Java 多线程 死锁 隐性死锁 数据竞争 恶性数据竞争 错误解决深入分析 全方向举例

    在几乎所有编程语言中,由于多线程引发的错误都有着难以再现的特点,程序的死锁或其它多线程错误可能只在某些特殊的情形下才出现,或在不同的VM上运行同一个程序时错误表现不同.因此,在编写多线程程序时,事先认 ...

  9. [改善Java代码]预防线程死锁

    线程死锁DeadLock是多线程编码中最头疼的问题,也是最难重现的问题,因为Java是单进程多线程语言.

随机推荐

  1. 浅谈WebService SOAP、Restful、HTTP(post/get)请求

    http://www.itnose.net/detail/6189456.html 浅谈WebService SOAP.Restful.HTTP(post/get)请求 2015-01-09 19:2 ...

  2. Mybatis中trim的使用

    trim标记是一个格式化的标记,可以完成set或者是where标记的功能,如下代码: 1. select * from user <trim prefix="WHERE" p ...

  3. 【Java】Swing+IO流实现一个简单的文件加密程序(demo版)

    留着参考 EncrytService package com.my.service; import java.io.File; import java.io.FileInputStream; impo ...

  4. SQuirrel-GUI工具安装手册-基于phoenix驱动

    背景描述: SQuirrel sql client 官方地址:http://www.squirrelsql.org/index.php?page=screenshots 一个图形界面的管理工具 安装手 ...

  5. EFM32JG系列MCU内部温度传感器使用方法

    在很多电子类应用场合中,我们经常需要采集产品工作的周围环境温度,一般采取的方式有两种: 1)外加温度传感器 2)采用MCU内部温度传感器 外加温度传感器会增加产品的成本以及布板空间,所以在很多场合,我 ...

  6. HDU 1263 二维map

    题意:给出一份水果的交易表,根据地区统计出水果的交易情况.   思路:二维map使用.   #include<cstdio> #include<string> #include ...

  7. Registering Components-->Autofac registration(include constructor injection)

    https://autofaccn.readthedocs.io/en/latest/register/registration.html Registration Concepts  (有4种方式来 ...

  8. AtCoder Regular Contest 093

    AtCoder Regular Contest 093 C - Traveling Plan 题意: 给定n个点,求出删去i号点时,按顺序从起点到一号点走到n号点最后回到起点所走的路程是多少. \(n ...

  9. 分布式技术 webapi

    webapi可以返回json.xml类型的数据,对于数据的增.删.改.成,提供对应的资源操作,按照请求的类型进行相应的处理,主要包括 Get(查).Post(增).Put(改).Delete(删),这 ...

  10. windchill系统——一些功能查找

    1.创建产品 导航栏的浏览——>最近的产品——>全部查看——>新建产品——>填写“名称”.选择“模板”.一定的“说明”.“专用访问权限”一般选择“否”——>“确定”选项 ...