多线程死锁代码实例
2013-01-28 20:51
399 查看
package com.oyqh;
public class RunnableTest implements Runnable {
private int flag = 1;
private Object obj1 = new Object(), obj2 = new Object();
public void run() {
System.out.println("flag=" + flag);
if (flag == 1) {
synchronized (obj1) {
System.out.println("我已经锁定obj1,休息0.5秒后锁定obj2去!");
try {
Thread.sleep(500);
} catch (InterruptedException e) {
e.printStackTrace();
}
synchronized (obj2) {
System.out.println("1");
}
}
}
if (flag == 0) {
synchronized (obj2) {
System.out.println("我已经锁定obj2,休息0.5秒后锁定obj1去!");
try {
Thread.sleep(500);
} catch (InterruptedException e) {
e.printStackTrace();
}
synchronized (obj1) {
System.out.println("0");
}
}
}
}
public static void main(String[] args) {
RunnableTest run01 = new RunnableTest();
RunnableTest run02 = new RunnableTest();
run01.flag = 1;
run02.flag = 0;
Thread thread01 = new Thread(run01);
Thread thread02 = new Thread(run02);
System.out.println("线程开始喽!");
thread01.start();
thread02.start();
}
}
上述代码实际运行时并不会产生死锁现象,若要死锁,则需要将 private Object obj1 = new Object(), obj2 = new Object();
改为 private static Object obj1 = new Object(), obj2 = new Object();
public class RunnableTest implements Runnable {
private int flag = 1;
private Object obj1 = new Object(), obj2 = new Object();
public void run() {
System.out.println("flag=" + flag);
if (flag == 1) {
synchronized (obj1) {
System.out.println("我已经锁定obj1,休息0.5秒后锁定obj2去!");
try {
Thread.sleep(500);
} catch (InterruptedException e) {
e.printStackTrace();
}
synchronized (obj2) {
System.out.println("1");
}
}
}
if (flag == 0) {
synchronized (obj2) {
System.out.println("我已经锁定obj2,休息0.5秒后锁定obj1去!");
try {
Thread.sleep(500);
} catch (InterruptedException e) {
e.printStackTrace();
}
synchronized (obj1) {
System.out.println("0");
}
}
}
}
public static void main(String[] args) {
RunnableTest run01 = new RunnableTest();
RunnableTest run02 = new RunnableTest();
run01.flag = 1;
run02.flag = 0;
Thread thread01 = new Thread(run01);
Thread thread02 = new Thread(run02);
System.out.println("线程开始喽!");
thread01.start();
thread02.start();
}
}
上述代码实际运行时并不会产生死锁现象,若要死锁,则需要将 private Object obj1 = new Object(), obj2 = new Object();
改为 private static Object obj1 = new Object(), obj2 = new Object();
相关文章推荐
- 对于多线程编程,很多人概念不清,写代码的时候要么是处处加锁,影响性能不说,还容易莫名其妙的死锁,还有人对多线程敬而远之。
- Android原生实现多线程断点下载实例代码
- 多线程死锁代码
- Python 爬虫多线程详解及实例代码
- 多线程死锁实例
- java多线程的同步方法实例代码
- PHP CURL 多线程操作代码实例
- java中多线程的实例代码
- Java编程一道多线程问题实例代码
- PHP CURL 多线程操作代码实例
- python面向对象多线程爬虫爬取搜狐页面的实例代码
- 多线程 —— 死锁代码展示
- Java死锁实例代码
- 多线程的同步问题代码实例
- Python实现多线程下载文件的代码实例
- Java编程之多线程死锁与线程间通信简单实现代码
- java多线程复制文件的实例代码
- Java实现多线程断点下载实例代码(下载过程中可以暂停)
- iOS多线程GCD之队列和任务详解(实例代码验证篇)
- JAVA死锁代码实例