线程

java.lang.Thread 线程类
  方法
    String getName()获取线程名称
    static Thread currentThread()获取当前线程对象
    void setName(String name)设置线程名称,注意主线程的名称不能设置
    static void sleep(long millis)休眠

    getPriority()得到当前线程的优先级
    setPriority()设置当前对象的优先级    //默认是5

开启新线程
  A:继承Thread(),重写线程体run(),调用start()方法
  B:定义一个实现类实现Runnable接口
    重写线程任务
    创建实现类对象
    创建线程对象Thread(Runnable r)
    start()
  B方法的好处
    避免了单继承的局限性
    降低了耦合性(创建线程对象和线程任务分开)

(必须保证锁对象的唯一性 A:只创建一个对象;B:用static)
线程安全隐患:当多个线程同时操作一个数据时容易产生错误
线程同步 (原理:有锁的线程执行,没锁的线程等待)
    1:同步代码块
      synchronized(任意对象){
          可能出现问题的代码
      }
    2:同步方法
      在方法的访问权限修饰符后 返回值类型之前添加一个关键字synchronized
      同步方法的锁是this,当前对象
      静态同步方法的锁是:类名.class (static优先于对象存在,所以里面不会有this)

因为锁可以是任意对象,所以这两个方法封装到Object中
    wait():当前线程进行等待(一定要有其它线程叫醒它才会继续执行)
    notify():唤醒其它线程

线程状态
    A:新建 NEW
    B:运行 RUNNABLE
    C:受阻塞 BLOCKED   //可以执行,但是cpu资源不够分配
    D:睡眠 TIMED WAITING   //自己放弃执行的资格,同时自己醒
    E:等待 WAITING      //自己陷入等待,别人叫醒
    F:消亡 TERMINATED

原文地址:https://www.cnblogs.com/chonglchong/p/6671114.html