@Cesar
2016-02-18T12:24:39.000000Z
字数 1342
阅读 1426
Java春节的时候去面试了一家公司,笔试题里面有一道是使用简单的代码实现线程的‘死锁’,当时没有想到这道题考的是Synchronized关键字,于是自己定义了两个资源模拟了一下。后面想想肠子都悔青了,于是自己在电脑上敲了一遍,同时也是对自己的一个提醒,基础功夫还不够扎实。
Java语言的关键字,当它用来修饰一个方法或者一个代码块的时候,能够保证在同一时刻最多只有一个线程执行该段代码。
package test160118;public class TestSynchronized {public static void main(String[] args) {Sy sy = new Sy(0);Sy sy2 = new Sy(1);sy.start();sy2.start();}}class Sy extends Thread {private int flag ;static Object x1 = new Object();static Object x2 = new Object();public Sy(int flag) {this.flag = flag;}@Overridepublic void run() {System.out.println(flag);try {if (flag == 0) {synchronized (x1) {System.out.println(flag+"锁住了x1");Thread.sleep(1000);synchronized (x2) {System.out.println(flag+"锁住了x2");}System.out.println(flag+"释放了x1和x2");}}if(flag == 1) {synchronized (x2) {System.out.println(flag+"锁住了x2");Thread.sleep(1000);synchronized (x1) {System.out.println(flag+"锁住了x1");}System.out.println(flag+"释放了x1和x2");}}} catch (InterruptedException e) {e.printStackTrace();}}}