-
创建线程有几种方式
1.(extends)继承thread类的子类(创建thread子类的实例,就是创建了线程),重写run方法体,调用线程对象的start()来启动该线程。(多线程各自完成自己的任务)
2.通过runnable接口创建线程,重写run()方法执行体,创建实例,作thread的target创建thread对象,调用线程对象的start()来启动该线程。(多线程共同完成一个任务)
3.(jdk1.5)覆盖写入callable接口实现多线程。
callable<String> callable =new mythread();
futuretask<String> futuretask = new futurettask<>(callable);
thread m1 = new thread(futuretask);//创建线程对象
m1.start();//启动线程
4.线程池创建线程,使用executors类中的newfixedthreadpool(int num)创建线程池,调用线程池的execute() 执行runnable的接口的线程,用submit 方法来值callable 接口创建的线程。调用线程池的shutdown来关闭线程。
-
单例模式手写代码
1.懒汉模式
private Singletion(){
//调这个方法来实现单利
}
public static (synchronized) Singletion getInstance (){ 、、同步锁加入是否实现线程安全
if( instance == null ){
instance = new Singleition();
}
return instance;
}
2.饿汉模式
private static final singleton instance = new singleton();
private Singletion(){
//调这个方法来实现单利
}
private static Singletion getinstance (){
return instance;
}
-
static 静态修饰符(隐藏,保持变量内容持久,直接通过类就可以访问类的属性和方法,违反封装,除了utils ,别用static)
1.static 方法作为静态方法,不依赖任何对象就可以对其访问,静态方法不能访问类的非静态成员变量和非静态成员方法,但是非静态方法是可以访问静态方法和变量。
2.static 变量 也成静态变量,静态变量被所以对象共享,类加载才会被初始化,只有一个副本。
3.static 优化程序性能,static 可以放在任何地方,也可以有多个static ,类加载会按照顺序执行,并且执行一次。
4.类加载先加载静态变量,如果静态很多就按顺序加载。
-
spring中的注解用什么作用
spring 注解可以减少xml配置;它可以充分利用 Java 的反射机制获取类结构信息,这些信息可以有效减少配置的工作。简化代码和配置 ,有助于增强程序的内聚性。而采用独立的 XML 配置文件,程序员在编
写一个功能时,往往需要在程序文件和配置文件中不停切换,这种思维上的不连贯会降低开发效率。
-
Arraylist的初始容量是0,如果创建时是10,以0.5倍的(扩容机制)增长策略。voctor 增长策略(扩容机制)是1倍。
-
int 基本数据类型的字节是4,long类型的有8个字节,char类型的数组也是8个字节
-
spring中 @resorty 和 @autowried 有什么区别,一个是按类型注入,一个是以名称set get 的方法来注入bean。