【】的灵感汇总

摘抄

《Thinking in Java》

  • Java尽力保证:所有变量在使用前都能得到恰当的初始化。P91
    类的每个基本类型数据成员保证都会有一个初始值,若在IDE初始化数据时未指定初始值,IDE报错,原因是IDE设计理念是不想让程序员忽视自己的工作缺失。

疑问

  • Java中禁止使用全局方法。
    是否因为static的main方法的存在?Java中不能出现静态内部类,所以无法写出一套包含main方法在内的全局方法?
  • Illegal forward reference
    向前引用 的疑问 P93
  • 多线程环境?Java中为什么说多线程环境就不安全?
    你是一个流浪汉,整天为饥饿发愁。有一天你发现了一个房间,这个房间里有很多食物,你很开心,你去品尝食物。但是好景不长,很快又有很多流浪汉也发现了这里,他们也来这个房间去吃食物,你不能阻挡他们。你很不爽,同时原来被整整齐齐摆放的食物,他们来了就狼吞虎咽,食物被整的乱七八糟。
    上面这个例子就是一个由单线程到多线程的问题,你一个人就是单线程,食物就是数据,你一个人可以处理数据,处理完了它就是那样,不可能由其他的线程来修改数据。但是一旦到多线程环境(很多流浪汉),多线程同样有操作数据的权力,他们可以任意修改数据,这样数据就可能被修改很多次,从而发生脏数据(食物乱七八糟),这样的数据就是不安全的,返回给前台用就有可能发生错乱,出来的结果与业务逻辑不符。
    怎么避免这个问题呢,也就是解决多线程问题,可以定义一个锁,加上synchronize关键字,锁住一个代码块,这样就算有很多人去抢同一个资源,有锁的话,一个人进去,把门关上,锁住,其他人就进不来了。这个人消耗了资源,然后再出来,下一个再进去。这样就避免哄抢的问题。还有更有效的方式是使用线程池,可以有效解决线程安全问题。
  • 为什么第5行处的方法名前都必须加上类名?
public class Singleton4 {
    // 私有构造
    private Singleton4() {}

    private static Singleton4 single = null;

    // 双重检查
    public static Singleton4 getInstance() {
        if (single == null) {
            synchronized (Singleton4.class) {
                if (single == null) {
                    single = new Singleton4();
                }
            }
        }
        return single;
    }
}

猜你喜欢

转载自blog.csdn.net/weixin_42915286/article/details/83414878
今日推荐