春节的时候去面试了一家公司,笔试题里面有一道是使用简单的代码实现线程的‘死锁’,当时没有想到这道题考的是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;
}
@Override
public 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();
}
}
}
总之说多了都是泪,关键不是我不会而是我没有想到它考的都是这个。也不知道面试过没过,有点方。后面会陆陆续续把之前面试时答得不是很好的几道题写成专栏的。