smallFishBug 发表于 2017-6-16 22:00:02

Java多线程05

Java静态类


一般情况是不可以用static修饰类   通常static修饰的是内部类

成员内部类:在一个类中创建另一个类
                      可以为静态(用static关键字修饰)也可以为非静态
静态内部类:定义:
                  可定义静态成员、静态方法
                  引用:
                     只可以引用外部类的静态成员方法、静态成员变量
                  创建:
                      创建静态内部类时不需要将静态内部类的实例绑定在外部类的实例上,也就是创建静态内部类的对象时,不需要其外部类的对象

非静态内部类:定义:
                     不可定义静态方法,可通过(同时有static final )定义静态成员变量
                     引用:
                     可随意访问外部类的成员变量与成员方法(private也行)
                      创建:
                     非静态内部类的实例一定要绑定在外部类的实例中

内置类与静态内置类
在内置类中当两个同步方法使用不同的锁时,运行结果为异步

New静态内置类时,需要在主类中导入该静态内置类
Synchronized(object)锁住的是对象   
当synchronized锁住静态内置类的对象后,其他线程只能以同步的方式调用
         该静态内置类的方法
当锁对象为String类型时,改变String值便是一个新锁(其他线程必须等String值改变后在运行,才能得到锁)

利用多线程可解决同步死循环   例如 while死循环

Volatile关键字与死循环
Volatile作用:强制从公共堆栈中取得变量的值,而不是从线程私有数据栈中取得变量的值

当JVM被设置为-serve模式时为了线程运行的效率,线程会从私有堆栈中取得数据,但是当循环判断值的更新却在公共堆栈的数据中,造成死循环


通过关键字volatile关键字解决问题


让线程强制从公共内存中读取变量值
使用volatile关键字增加了实例变量在多个线程之间的可见性


页: [1]
查看完整版本: Java多线程05