面试常见问题 死锁代码&单例模式

来源:互联网 发布:下载邪恶漫画软件 编辑:程序博客网 时间:2024/05/29 17:24

1.写一个死锁

1)写一个锁类包含两个锁 锁A以及锁B

package cn.itcast.dieLock;public class MyLock {public static Object objA=new Object();//定义两把锁public static Object objB=new Object();}

2)死锁类

package cn.itcast.dieLock;public class DieLock extends Thread{private boolean flag;public DieLock(boolean flag){this.flag=flag;}@Overridepublic void run() {if(flag){synchronized (MyLock.objA) {System.out.println("if objA");synchronized (MyLock.objB) {System.out.println("if objB");}}}else{synchronized (MyLock.objB) {System.out.println("else objB");synchronized (MyLock.objA) {System.out.println("else objA");}}}}}
3)测试:

package cn.itcast.dieLock;public class DieLockTest {public static void main(String[] args) {DieLock d1=new DieLock(true);DieLock d2=new DieLock(false);d1.start();d2.start();}}
2.单例模式的恶汉式:

package cn.itcast.model;public class SingleModel {private SingleModel(){}//私有化private static SingleModel model=new SingleModel();//恶汉式一来就new对象public static SingleModel getInstance(){return model;}}
测试:

package cn.itcast.model;public class SingleTest {public static void main(String[] args) {SingleModel model = SingleModel.getInstance();SingleModel model2 = SingleModel.getInstance();System.out.println(model==model2);}}
打印结果:true

3.单例模式的懒汉式只有用到的时候才new对象

package cn.itcast.model;public class SingleModel2 {private SingleModel2(){}private static SingleModel2 model=null;//懒汉式 一来的时候不newpublic synchronized static SingleModel2 getInstance(){if(model==null){model=new SingleModel2();}return model;}}

测试:

package cn.itcast.model;public class SinlgeMode2Test {public static void main(String[] args) {SingleModel2 model=SingleModel2.getInstance();SingleModel2 mode2 = SingleModel2.getInstance();System.out.println(model==mode2);}}
运行结果:true

注意:恶汉式开发的时候使用,因为没有线程安全问题,懒汉式有线程安全的问题,因此面试的时候经常问,但是面试的时候一定要加 同步锁!







0 0
原创粉丝点击