java面试_设计模式和线程

9 篇文章 0 订阅

1.单例模式
肤浅来讲,单例模式就是构造方法私有化,将对象的引用并且是static的,作为成员变量,提供一个返回对象的方法,不允许别的类new对象,这样就可以保证只有一个对象。当需要的时候调用类提供的方法获得对象,优点一来可以实现懒加载,即延时加载二来可以使对象常驻内存
单例模式的使用场景:数据库的连接
代码:
public class TestSingleTon {
private static TestSingleTon t;
private TestSingleTon(){
}
public static TestSingleTon getObject(){
if(t == null){
t = new TestSingleTon();
}
return t;
}
}
单例进阶:加入线程安全,双重锁判断实现单例模式

2.java中创建对象的方法
1.new调用构造方法
2.java反射机制Class.forname(“类名).newInstance();

  1. Constructor类的newInstance方法,constructor类是构造方法的实体类,可以通过构造方法获取
    4.使用clone方法
    Clone方法:实现cloneable接口,重写object的clone方法,

       深拷贝:所有的引用类型也是新的地址
       浅拷贝:只有对象本身是新的地址,引用数据类型不是
    

    5.序列化和反序列化对象时,会创建新的对象
    序列化和反序列化:用于持久性存储,需要指定serialVersionUID否则会导致序列化反序列化同一个对象,不识别之前的数据

3.抽象工厂模式
一个类专门用来创建一系列的类,比如要创建红色的类,只需要调用这个类的创建红色的方法,主要解决接口的选择问题。
4.其他设计模式
工厂模式,代理模式,mvc模式

5.多线程的资源共享
线程可以共享内存,jmm中有一个共享内存区域,每个线程还有个tls 是每个线程独享的资源

6.线程安全(两个关键字)

  1. synchronized(同步锁)
    执行机制:在执行代码之前先判断锁,获得锁之后才会执行代码,满足了原子性和可见性
    代码用法:1.方法声明时加上synchronized关键字,则整个方法加上锁,方法执行期间不能被访问
         2.在方法内部,使用关键字声明一段代码,仅仅代码块内的代码不能被访问
    
  2. volatile修饰变量
    执行机制:被volatile修饰的变量,在操作之前先访问上次修改的值,确保有序性,把tls里的变量强行放到共享内存里。
    特殊情况: ++num,num使用volatile修饰时 结果和预期不一样,因为++num是个复合操作。

7.死锁
产生条件
资源互斥,循环等待,无限等待,请求和保持,不可剥夺
防止死锁
破坏其中一个条件,加入死锁检测,加入超时机制
8.java线程池
原因:避免频繁的创建和销毁线程,浪费系统资源。
Java中创建线程池:ThreadPoolExecutor 类

  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值