关键词:
1、死锁案例
public class DeadLock {
final Object lockA = new Object();
public static void main(String[] args) {
DeadLock demo = new DeadLock();
demo.startLock();
}
public void startLock() {
ThreadA a = new ThreadA(lockA, lockB);
ThreadB b = new ThreadB(lockA, lockB);
a.start();
b.start();
}
}
class ThreadA extends Thread {
private Object lockA = null;
private Object lockB = null;
public ThreadA(Object a, Object b) {
this.lockA = a;
this.lockB = b;
}
public void run() {
synchronized (lockA) {
System.out.println("---- Thread A: locked A");
try {
sleep(3000);
} catch (InterruptedException e) {
e.printStackTrace();
}
synchronized (lockB) {
System.out.println("---- Thread A: locked B");
}
}
System.out.println("---- Thread A: Finished");
}
}
class ThreadB extends Thread {
private Object lockA = null;
private Object lockB = null;
public ThreadB(Object a, Object b) {
this.lockA = a;
this.lockB = b;
}
public void run() {
synchronized (lockB) {
System.out.println("---- Thread B: locked B");
try {
sleep(3000);
} catch (InterruptedException e) {
e.printStackTrace();
}
synchronized (lockA) {
System.out.println("Tread B: locked A");
}
}
System.out.println("---- Thread B: Finished");
}
}
2、死锁分析
打印Thread Dump
linux 环境kill -3 pid 或者jstack
windows环境 ctrl+fn+b
dump信息如下:
D: estdeadlock>java DeadLock
---- Thread A: locked A
---- Thread B: locked B
2018-07-14 17:45:52
Full thread dump Java HotSpot(TM) Client VM (24.65-b04 mixed mode, sharing):
"DestroyJavaVM" prio=6 tid=0x02c4bc00 nid=0x1548 waiting on condition [0x00000000]
java.lang.Thread.State: RUNNABLE
"Thread-1" prio=6 tid=0x02d2b400 nid=0x2b24 waiting for monitor entry [0x054bf000]
java.lang.Thread.State: BLOCKED (on object monitor)
at ThreadB.run(DeadLock.java:64)
- waiting to lock <0x252811c0> (a java.lang.Object)
- locked <0x252811c8> (a java.lang.Object)
"Thread-0" prio=6 tid=0x02d2ac00 nid=0x3640 waiting for monitor entry [0x0542f000]
java.lang.Thread.State: BLOCKED (on object monitor)
at ThreadA.run(DeadLock.java:37)
- waiting to lock <0x252811c8> (a java.lang.Object)
- locked <0x252811c0> (a java.lang.Object)
"Service Thread" daemon prio=6 tid=0x02cdd800 nid=0x4138 runnable [0x00000000]
java.lang.Thread.State: RUNNABLE
"C1 CompilerThread0" daemon prio=10 tid=0x02cdc800 nid=0x2324 waiting on condition [0x00000000]
java.lang.Thread.State: RUNNABLE
"Attach Listener" daemon prio=10 tid=0x02cdac00 nid=0x22dc runnable [0x00000000]
java.lang.Thread.State: RUNNABLE
"Signal Dispatcher" daemon prio=10 tid=0x02d04800 nid=0x2fb0 waiting on condition [0x00000000]
java.lang.Thread.State: RUNNABLE
"Finalizer" daemon prio=8 tid=0x02c70000 nid=0x708 in Object.wait() [0x050cf000]
java.lang.Thread.State: WAITING (on object monitor)
at java.lang.Object.wait(Native Method)
- waiting on <0x25200fc8> (a java.lang.ref.ReferenceQueue$Lock)
at java.lang.ref.ReferenceQueue.remove(ReferenceQueue.java:135)
- locked <0x25200fc8> (a java.lang.ref.ReferenceQueue$Lock)
at java.lang.ref.ReferenceQueue.remove(ReferenceQueue.java:151)
at java.lang.ref.Finalizer$FinalizerThread.run(Finalizer.java:209)
"Reference Handler" daemon prio=10 tid=0x02c6e800 nid=0xf40 in Object.wait() [0x0503f000]
java.lang.Thread.State: WAITING (on object monitor)
at java.lang.Object.wait(Native Method)
- waiting on <0x25200db0> (a java.lang.ref.Reference$Lock)
at java.lang.Object.wait(Object.java:503)
at java.lang.ref.Reference$ReferenceHandler.run(Reference.java:133)
- locked <0x25200db0> (a java.lang.ref.Reference$Lock)
"VM Thread" prio=10 tid=0x02c6d400 nid=0x1150 runnable
"VM Periodic Task Thread" prio=10 tid=0x02d16400 nid=0x3130 waiting on condition
JNI global references: 111
Found one Java-level deadlock:
=============================
"Thread-1":
waiting to lock monitor 0x02c73be4 (object 0x252811c0, a java.lang.Object),
which is held by "Thread-0"
"Thread-0":
waiting to lock monitor 0x02c75704 (object 0x252811c8, a java.lang.Object),
which is held by "Thread-1"
Java stack information for the threads listed above:
===================================================
"Thread-1":
at ThreadB.run(DeadLock.java:64)
- waiting to lock <0x252811c0> (a java.lang.Object)
- locked <0x252811c8> (a java.lang.Object)
"Thread-0":
at ThreadA.run(DeadLock.java:37)
- waiting to lock <0x252811c8> (a java.lang.Object)
- locked <0x252811c0> (a java.lang.Object)
Found 1 deadlock.
Heap
def new generation total 4928K, used 867K [0x25200000, 0x25750000, 0x2a750000)
eden space 4416K, 19% used [0x25200000, 0x252d8fe0, 0x25650000)
from space 512K, 0% used [0x25650000, 0x25650000, 0x256d0000)
to space 512K, 0% used [0x256d0000, 0x256d0000, 0x25750000)
tenured generation total 10944K, used 0K [0x2a750000, 0x2b200000, 0x35200000)
the space 10944K, 0% used [0x2a750000, 0x2a750000, 0x2a750200, 0x2b200000)
compacting perm gen total 12288K, used 157K [0x35200000, 0x35e00000, 0x39200000)
the space 12288K, 1% used [0x35200000, 0x35227730, 0x35227800, 0x35e00000)
ro space 10240K, 44% used [0x39200000, 0x3967a688, 0x3967a800, 0x39c00000)
rw space 12288K, 52% used [0x39c00000, 0x3a254170, 0x3a254200, 0x3a800000)
2018-07-25期java序列化和反序列化编程小案例
packagecn.sjq.Serializable.java;importjava.io.FileInputStream;importjava.io.FileOutputStream;importjava.io.InputStream;importjava.io.ObjectInputStream;importjava.io.ObjectOutputStream;importjava.io.Ou 查看详情
2018-07-30期mapreduce分区(partitioner)编程案例
1、EmpSalaryBean对象packagecn.sjq.mr.part;importjava.io.DataInput;importjava.io.DataOutput;importjava.io.IOException;importorg.apache.hadoop.io.Writable;/***定义一个员工薪水的JavaBean,并实现MapReduce的Writable序列化接口*@ 查看详情
java并发编程实战读书笔记之死锁(代码片段)
死锁的分类前言一、锁顺序死锁二、动态的锁顺序死锁。前言本篇学习笔记源自于《Java并发编程实战》第10章。提示:以下是本篇文章正文内容,下面案例可供参考一、锁顺序死锁看下面代码,很容易造成死锁,l... 查看详情
java并发编程实战读书笔记之死锁(代码片段)
死锁的分类前言一、锁顺序死锁二、动态的锁顺序死锁。前言本篇学习笔记源自于《Java并发编程实战》第10章。提示:以下是本篇文章正文内容,下面案例可供参考一、锁顺序死锁看下面代码,很容易造成死锁,l... 查看详情
2018-08-03期mapreduce倒排索引编程案例1(combiner方式)
packagecn.sjq.bigdata.inverted.index;importjava.io.IOException;importorg.apache.hadoop.conf.Configuration;importorg.apache.hadoop.fs.Path;importorg.apache.hadoop.io.LongWritable;importorg.apache.hadoo 查看详情
2018-08-04期mapreduce倒排索引编程案例2(jobcontroll方式)
1、第一阶段MapReduce任务程序packagecn.itcast.bigdata.index;importjava.io.IOException;importorg.apache.hadoop.io.IntWritable;importorg.apache.hadoop.io.LongWritable;importorg.apache.hadoop.io.Text;importorg.apa 查看详情
java并发编程04:死锁
1、什么是死锁多线程以及多进程改善了系统资源的利用率并提高了系统的处理能力。然而,并发执行也带来了新的问题--死锁。所谓死锁是指多个线程因竞争资源而造成的一种僵局(互相等待),若无外力作用,这些进程都将无... 查看详情
mysql产生死锁原因(代码片段)
阅读目录锁类型介绍死锁产生原因和示例1、产生原因2、产生示例案例一案例二案例三案例四案例五案例六锁类型介绍MySQL有三种锁的级别:页级、表级、行级1表级锁:开销小,加锁快;不会出现死锁;锁定粒... 查看详情
java多线程产生死锁的一个简单案例(代码片段)
今天面试中问到了Java多线程死锁的问题,回答不上来,特别囧,在网上查了查,结果如下synchronized是Java中的关键字,是一种同步锁。它修饰的对象有以下几种:1.修饰一个代码块,被修饰的代码块称为同步语句块,其作用的范... 查看详情
java并发编程-一个简单的死锁示例和死锁的检查(代码片段)
Java线程死锁是一个经典的多线程问题。因为不同的线程都在等待根本不可能被释放的锁,从而导致所有的任务都无法继续完成。1.死锁程序示例创建类DeadLockThread:publicclassDeadLockThreadimplementsRunnableprivateObjectlock1=newObject();priva... 查看详情
java多线程产生死锁的一个简单案例
synchronized是Java中的关键字,是一种同步锁。它修饰的对象有以下几种:1.修饰一个代码块,被修饰的代码块称为同步语句块,其作用的范围是大括号括起来的代码,作用的对象是调用这个代码块的对象;2.修饰一个方法,被修饰... 查看详情
并发编程--锁--如何使用命令行和代码定位死锁
用命令行的方式找到死锁本地环境下,如果程序发生死锁后,首先cmd进入$JAVA_HOME/bin/中,输入jps命令,就可以查看到当前Java程序的pid,找到死锁类的pid后执行jstack命令+空格+死锁类的pid,就可以获取线程获取锁的信息。截取一部... 查看详情
java并发编程:死锁(含代码)
...2018-11-1014:04:32当线程需要同时持有多个锁时,有可能产生死锁。考虑如下情形:线程A当前持有互斥所锁lock1,线程B当前持有互斥锁lock2。接下来,当线程A仍然持有lock1时,它试图获取lock2,因为线程B正持有lock2,因此线程A会阻塞... 查看详情
javasocket编程--聊天小案例
很久以前写过socket聊天室,都快忘完了,心血来潮又重新写一遍。服务器端:packagecom.fancy;importjava.io.BufferedReader;importjava.io.IOException;importjava.io.InputStream;importjava.io.InputStreamReader;importjava.io.OutputStream;imp 查看详情
并发编程之死锁解析(代码片段)
...在Java的并发编程中,有一个问题需要特别注意,那就是死锁,如果发生了死锁,基本就是重启,而重启将会丢失运行中的数据。所以,了解死锁的形成并排查死锁到预防死锁成了一个重要的问题。我们了解任何一个事情的步骤... 查看详情
死锁案例(代码片段)
https://mp.weixin.qq.com/s/2obpN57D8hyorCMnIu_YAg 死锁案例八 文|杨一on运维转|来源:公众号yangyidba 一、前言死锁其实是一个很有意思也很有挑战的技术问题,大概每个DBA和部分开发朋友都会在工作过程中遇见。关于死锁我... 查看详情
mysql产生死锁原因(代码片段)
阅读目录锁类型介绍死锁产生原因和示例1、产生原因2、产生示例案例一案例二案例三案例四案例五案例六锁类型介绍MySQL有三种锁的级别:页级、表级、行级1表级锁:开销小,加锁快;不会出现死锁;锁定粒... 查看详情
蚂蚁java互联网高级架构师第3期视频教程
...度网盘下载目录├─0001-3期-开班仪式.rar├─0002-3期-并发编程专题之多线程基础.rar1?3G6n-E"d3C%w├─0003-3期-并发编程专题之Java内存模型.rar├─0004-3期-并发编程专题-多线程之间通讯.rar├─0005-3期-并发编程专题-线程池原理分析.rar... 查看详情