使用git reset之后,如何恢复删除掉的commit
2011-03-30 09:19
501 查看
很多java面试喜欢考单例模式,网上也一大堆文章。在这里也自己实现一次,作个纪念。
import java.io.*; /** * User: sunlong * Date: 13-9-29 * Time: 下午3:55 */ public class Singleton { private static Singleton singleton = new Singleton(); private Singleton(){} public static Singleton getInstance(){ return singleton; } } /** * 饿汉式 * 非线程安全实现 */ class Singleton2{ private Singleton2(){} private static Singleton2 singleton; public static Singleton2 getInstance(){ if(singleton == null){ singleton = new Singleton2(); } return singleton; } } /** * 线程安全,但性能很糟糕 */ class Singleton3{ private Singleton3(){} private static Singleton3 singleton; public static Singleton3 getInstance(){ synchronized (Singleton3.class){ if(singleton == null){ singleton = new Singleton3(); } } return singleton; } } /** * 双检查锁 * 可能会失效,因为同步块外面的if (singleton == null)可能看到已存在,但不完整的实例。 * 一篇参考文章 * http://www.cs.umd.edu/~pugh/java/memoryModel/DoubleCheckedLocking.html */ class Singleton4{ private Singleton4(){} private static Singleton4 singleton; //JDK5.0以后版本若singleton为volatile则可行 public static Singleton4 getInstance(){ if(singleton == null){ synchronized (Singleton4.class){ if(singleton == null){ singleton = new Singleton4(); } } } return singleton; } } /** * 使用内部类实现延迟加载 * 线程安全 */ class Singleton5 { private static class Singleton5Holder { final static Singleton5 INSTANCE = new Singleton5(); } private Singleton5 (){ } public static Singleton5 getInstance() { return Singleton5Holder.INSTANCE; } } /** * 为了使Singleton类变成可序列化的(serializable), * 仅仅实现Serializable接口是不够的。为了维护 Singleton的单例性,你必须给Singleton类提供一个readResolve方法, * 否则的话,一个序列化的实例,每次反序列化的时候都会产 生一个新的实例。Singleton 也不会例外。 */ class Singleton6 implements Serializable{ private static Singleton6 singleton = new Singleton6(); private Singleton6(){} public static Singleton6 getInstance(){ return singleton; } // private Object readResolve() throws ObjectStreamException { // return singleton; // } public static void main(String[] args) throws IOException, ClassNotFoundException { ObjectOutputStream objectOutputStream = new ObjectOutputStream(new FileOutputStream("D:\\Singleton.obj")); Singleton6 singleton = Singleton6.getInstance(); objectOutputStream.writeObject(singleton); objectOutputStream.close(); //反序列化 ObjectInputStream objectInputStream = new ObjectInputStream(new FileInputStream("D:\\Singleton.obj")); Singleton6 singleton2 = (Singleton6)objectInputStream.readObject(); objectInputStream.close(); //比较是否原来的实例 System.out.println(singleton==singleton2); } }
相关文章推荐
- git相关-- git命令 及 git add后 未commit git reset --hard如何恢复
- 如何恢复 git reset --hard 删除的文件
- git add后 未commit git reset --hard如何恢复
- git reset到之前的某一个commit或者恢复之前删除的某一个分支
- 解决SVN误操作--使用Git仓库中恢复已删除的分支、文件或丢失的操作
- Oracle之删除数据之后如何恢复的方法总结
- 如何用git reflog和git cherry-pick找回已删除的commit记录
- Linux中使用lsof命令如何恢复删除的文件?
- 从Git仓库中恢复已删除的分支、文件或丢失的commit
- git使用点滴:如何查看commit的内容
- 如何使用git比较两次commit之间的差异文件
- 恢复git reset后的commit
- 当出现no changes added to commit时如何正确使用git提交命令
- 从Git仓库中恢复已删除的分支或丢失的commit
- 在Git中如何使用类似SVN中的revert功能恢复一个changed file
- 从Git仓库中恢复已删除的分支、文件或丢失的commit[转]
- Win7如何使用系统保护功能恢复删除文件
- mysql 误删除ibdata1之后如何恢复
- Git版本控制:利用git reset恢复档案,暂寸状态,commit讯息
- 当出现no changes added to commit时如何正确使用git提交命令