1.单实例模式
单实例模式是java设计模式中最简单的设计模式,这种模式只涉及单一的类,该类自己创建对象,且只允许创建一个对象,同时该类提供一种获取该对象的方法,可以直接访问。
意图:保证一个类仅有一个实例,并提供一个访问它的全局访问点。
主要解决:一个全局使用的类频繁地创建与销毁。
何时使用:当您想控制实例数目,节省系统资源的时候。
如何解决:判断系统是否已经有这个单例,如果有则返回,如果没有则创建。
关键代码:构造函数是私有的。
示例:
1.懒汉式,线程不安全
描述:这种方式是最基本的方式,他的最大问题是不支持多线程,没有加锁synchronized,这种方式不要求线程安全,在多线程时无法正常工作
public class Singleton{
public static Singleton instance;
private Singleton(){};//构造器私有
public static Singleton getInstance(){
if(instance==null) instance=new Singleton();
return instance;
}
}
2.饿汉式,
描述:这种方式比较常用,支持线程安全,但容易产生垃圾对象
public class Singleton{
public static SingLeton instance=new SingLeton();
private SingLeton(){};
public static Singleton getinstance(){
return instance;
}
}
同时可在这个单实例类中添加需要再项目中频繁用到的对象,例如队列,这样便于节省内存。
什么是线程
1.现代操作系统时多任务操作系统,多线程是多任务实现的一种方式;
那么多线程与多进程有哪些区别呢?本质在于每个进程有自己的一整套变量,而线程则共享数据,,这使得线程之间的通信更加有效容易,开销更小。
图片数组
一张图片是有许多个像素点组成的,这些像素点有自己的RGB值,因此一张图片可以看成一个二维数组。在java中我们可以这样获取这个图片二维数组
public int[][] getPixelArr(String path){
File file=new File(path);
BufferedImage bImage=null;
try{
bImage=ImageIO.read(file);
}catch(Exception e){
e.printStackTrace();
}
int w=bImage.getWidth();
int h=bImage.getHeight();
int[][] ImageArr=new int[w][h];
for(int i=0;i<w;i++){
for(int j=0;j<h;j++){
int v=bImage.getRGB(i,j);
ImageArr[i][j]=v;
}
}
return ImageArr;
}
代码地址
https://github.com/wmdsg/javaThread