总结

线程

  • 线程创建方式一:
  1. 继承Thread类(实现Runnable接口)
  2. 继承Thread类
  3. 重写run方法
  4. 创建子类对象
  5. 调用start方法(这个方法是Thread里面的方法)
  • 创建线程的方式二:

    start方法是开启一个新的线程,会自动调用run方法

  1. 写一个类实现Runnable
  2. 重写run方法
  3. 创建类的对象
  4. 将对象作为实例后Thread对象的参数传递
  5. 调用start方法
  • Thread类中常用方法:
  1. currentThread 获取当前线程对象
  2. setName 设置线程名字
  3. getName 获取线程名字
  4. setPriority 设置优先级
  5. getPriority 获取优先级
  6. sleep 使当前线程睡眠多少毫秒

线程安全

  • 当多个线程访问同一资源时,如果没有做限制,会出现线程安全问题
  • 解决线程安全的方式:

    方式一:使用synchronized 同步、效率低、监听对象要保证唯一性

    同步代码块:

    synchronized(监听对象){

    会出现线程安全的代码

    }

    关于监听对象:

    1.Runnable的实现类可以用this,Thread的继承类不能用this,不能保证唯一性

    2.static修饰的对象可以,实现类里可以不用写,因为只创建了一个对象

    3.常量池中的字符串可以

    4.类锁可以:类名.class和对象名.getClass()

    同步方法:

    public后面加一个synchronized修饰,相当于this,再加个static就相当于一个类锁

    方式二:jdk1.6之后可以用Lock接口的实现类 ReentrantLock

    使用方法:

    Lock l = new ReentrantLock();

    l.lock();//开锁

    try{

    存在线程安全的代码

    }finally{

    l.unLock()//关锁

    }

    synchronized的锁会自动释放,lock的锁要手动释放


HUIYL1
7 声望1 粉丝