1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 |
/** * @author hollis */ public class JStackDemo { public static void main(String[] args) { Thread t1 = new Thread( new DeadLockclass( true )); //建立一个线程 Thread t2 = new Thread( new DeadLockclass( false )); //建立另一个线程 t1.start(); //启动一个线程 t2.start(); //启动另一个线程 } } class DeadLockclass implements Runnable { public boolean falg; // 控制线程 DeadLockclass( boolean falg) { this .falg = falg; } public void run() { /** * 如果falg的值为true则调用t1线程 */ if (falg) { while ( true ) { synchronized (Suo.o1) { System.out.println( "o1 " + Thread.currentThread().getName()); synchronized (Suo.o2) { System.out.println( "o2 " + Thread.currentThread().getName()); } } } } /** * 如果falg的值为false则调用t2线程 */ else { while ( true ) { synchronized (Suo.o2) { System.out.println( "o2 " + Thread.currentThread().getName()); synchronized (Suo.o1) { System.out.println( "o1 " + Thread.currentThread().getName()); } } } } } }
class Suo { static Object o1 = new Object(); static Object o2 = new Object(); } |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 |
import org.springframework.stereotype.Component;
@Component public class SynchronizedTest {
private static final Object lockA = new Object(); private static final Object lockB = new Object();
/** * ThreadA先获取lockA,在获取lockB */ private static class ThreadA extends java.lang.Thread {
@Override public void run() { // 获取临界区A synchronized (lockA) { System.out.println( "get lockA success" ); // 模拟耗时操作 try { Thread.currentThread().setName( "线程A" ); Thread.sleep( 500 ); } catch (InterruptedException e) { e.printStackTrace(); } // 获取临界区B synchronized (lockB) { System.out.println( "get lockB success" ); } } } }
/** * ThreadB先获取lockB,在获取lockA */ private static class ThreadB extends java.lang.Thread {
@Override public void run() { // 获取临界区A synchronized (lockB) { System.out.println( "get lockB success" ); // 模拟耗时操作 try { Thread.currentThread().setName( "线程B" ); Thread.sleep( 500 ); } catch (InterruptedException e) { e.printStackTrace(); } // 获取临界区B synchronized (lockA) { System.out.println( "get lockA success" ); } } } }
static { new ThreadA().start(); new ThreadB().start(); } } |
总结
本篇文章就到这里了,希望能够给你带来帮助,也希望您能够多多关注的更多内容!
原文链接:https://HdhCmsTestcnblogs测试数据/shihaiming/p/11459953.html