您的位置:首页 > 编程语言 > Java开发

Java并发编程的艺术-第一章<并发编程的挑战>

2017-03-05 23:04 447 查看
引起死锁的demo代码:

package com.evan.concurrent.thread;

/**
* Created by evan on 2/26/17.
*/
public class ThreadDeadLockTest {

public static final String A = "A";
public static final String B = "B";

public static void main(String[] args) throws Exception {
System.out.println("主线程开始。。。");
deadLock();
System.out.println("主线程结束。。。");
}

public static void deadLock() throws Exception{
Thread t1 = new Thread(new Runnable() {
public void run() {

synchronized (A){
System.out.println(Thread.currentThread().getName()+"线程A执行1");

try {
Thread.sleep(1000);
} catch (InterruptedException e) {
e.printStackTrace();
}
synchronized (B){
System.out.println(Thread.currentThread().getName()+"线程B执行1");

}
}

}
});

t1.start();

Thread t2 = new Thread(new Runnable() {
public void run() {
synchronized (B){
System.out.println(Thread.currentThread().getName()+"线程B执行2");

try {
Thread.sleep(1000);
} catch (InterruptedException e) {
e.printStackTrace();
}
synchronized (A){
System.out.println(Thread.currentThread().getName()+"线程A执行2");

}
}
}
});

t2.start();

System.out.println("主线程执行");

}
}


输出结果:

主线程开始。。。
主线程执行
主线程结束。。。
Thread-1线程B执行2
Thread-0线程A执行1


线程1和线程2的输出可能是第二到第五行之间。

建议:

有的并发程序写的不严谨,在并发下如果出现问题,定位起来会比较耗时和棘手。所以,对于Java开发工程师而言,笔者强烈建议多使用JDK并发包提供的并发容器和工具类来解决并发问题,因为这些类都已经通过了充分的测试和优化。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息