几个常见小demo的考察

手写单例模式

  • 为什么要有单例模式(实际编程应用场景中,有一些对象其实我们只需要一个,比如线程池对象、缓存、系统全局配置对象等。这样可以就保证一个在全局使用的类不被频繁地创建与销毁,节省系统资源。
  • 实现单例模式的几个要点(首先要确保全局只有一个类的实例,所以要保证这一点,至少类的构造器要私有化单例的类只能自己创建自己的实例,因为,构造器私有了,但是还要有一个实例,所以只能自己创建;单例类必须能够提供自己的唯一实例给其他类,所以要有一个公共的方法能返回该单例类的唯一实例
  • 实现方式(懒汉式,是最基本的实现方式,第一次调用才初始化,实现了懒加载的特性;饿汉式,类加载时就初始化实例,避免了多线程同步问题。
懒汉式(线程不安全)
public class Singleton {
    private static Singleton singleton;
    private Singleton() {}
    public static Singleton getInstance() {
        if (singleton == null) {
            singleton = new Singleton();
        }
        return singleton;
    }
}
饿汉式
public class Singleton {  
    private static Singleton instance = new Singleton();  
    private Singleton (){}  
    public static Singleton getInstance() {  
    return instance;  
    }  
}

手写线程死锁

package com.wang;


import java.util.concurrent.TimeUnit;

class holdlock implements Runnable {
    String lockA;
    String lockB;

    public holdlock(String lockA, String lockB) {
        this.lockA = lockA;
        this.lockB = lockB;
    }

    @Override
    public void run() {
        synchronized (lockA) {
            System.out.println("已经获得锁" + lockA + ",尝试获得锁" + lockB);
            try {
                TimeUnit.SECONDS.sleep(3);
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
            synchronized (lockB) {
                System.out.println("已经持有锁" + lockB + ",尝试获取锁" + lockA);
            }
        }
    }
}

public class deadlockdemo {
    public static void main(String[] args) {
        String lockA = "locka";
        String lockB = "lockb";
        new Thread(new holdlock(lockA, lockB)).start();
        new Thread(new holdlock(lockB, lockA)).start();

    }
}


#学习路径#
全部评论

相关推荐

不多说了,看图吧
MomonKa:实际上是,机房机器有些高度,问问你身高,有没有女朋友是看你能不能猛猛加班
你最讨厌面试问你什么?
点赞 评论 收藏
分享
但我还是会继续秋招的
投递京东等公司10个岗位
点赞 评论 收藏
分享
评论
4
19
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务