JAVA&Arrays&线程&线程安全&线程单例&双重锁机制的应对

Day8.10

Arrays 工具类

  1. Arrays.toString(arr[])

    数组转字符串

  2. 数组转集合 asList()

    简单类型数组转集合

    Arrays.asList(int [])会把整个数组整体当成一个元素放到集合中

    Arrays.asList(引用类型) 直接转成集合

    注意点:

    转过来的集合长度是固定的,所以不能执行增加。删除,但是可以执行修改,更改,遍历

    list.set(0,“aa”);

    线程

    默认情况下,主线程和垃圾回收线程都是由系统创建的,但是我们需要完成自己的功能—创建自己的线程对象,java将线程面向对象了,形成的类就是Thread,在Thread类内部执行任务的方法叫run()

    注意:如果想让run作为任务区,必须让他去被自动调用.我们通过执行start()方法,来开启用线程,继而实现run方法的自动调用。

    子线程名字从thread01开始

    1. 手动创建自己干活的线程继承Thread,重写run 方法并且创建对象调用

    2. 启用线程是通过对象的start方法,而不是手动调用run。因为线程获取cpu是随机的,run是线程的任务区,代表功能,如果手动执行run,此时线程可能没有拿到cpu,无法工作,操作失败,通过start让线程处于就绪状态,随时拥有抢cpu的能力,当抢到cpu后,再启动线程

    3. 可以改线程名字 写构造方法传参super(String name)或者在start之前setname

    4. 任务和线程分离

      独立创建一个任务类implements Runnable接口

      重写run方法 然后创建任务类对象 作为参数传给Thread的构造方法

      用Thread线程对象干活

    5. 任务和线程不分离

      几个线程对象共用的数据需要加static

    6. 线程安全解决办法 同步锁:同步代码块

      synchronized(锁 对象){

      //里面是多线程重复执行的代码块

      }//对象可以是任意的 this(当前类对象) 字节码文件当前类Ticket.class (静态同步方法) obj

      //因为字节码文件范围太大一般不用

      要保证共享一个对象 不能用匿名子对象

    7. 单例(懒汉式)线程安全问题

public class SingleCase {
    private static SingleCase instance=null;
    private SingleCase(){}
    public static  SingleCase getInstance(){
        if(instance==null){
            synchronized (SingleCase.class){
                if (instance==null){
                    instance=new SingleCase();
                }
            }
        }
        return instance;
    }
}

双重锁机制

貌似双重锁不会正常工作

我认为双重锁机制之所以不能正常运行是因为,在new对象的时候,是有三个步骤的:分配内存空间,初始化对象,然后将内存地址赋值给变量;在这么三个步骤中,极有可能会在操作上进行重排序,在重排序的情况下,还没有初始化对象,先将内存地址赋值给了变量(这种情况是可能存在的),当线程B进入时,发现变量不为null,就会直接返回这个实例,然而此时可能拿到的是还没有初始化完成的对象。所以双重锁机制是不提倡使用的。

   //Initialization on Demand Holder.模式
class  mySingleleton{
    private mySingleleton(){}
    private static  class SingletonHolder{
        public  final  static  mySingleleton instance=new mySingleleton();

    }
    public static mySingleleton getInstance(){
        return  SingletonHolder.instance;
    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值