Java

Java - 多线程
    > 线程的两种实现方式:
        > 继承(extends) Thread 类
        > 实现(implements) Runnable 接口
    > 继承与实现的区别和联系
        > public class Thread implements Runnable
        > 实现避免了java中单继承的局限性,所以最好用实现的方式实现多线程(比如在多个线程操纵同一个
           资源的情况,使用实现接口方式只需要 new 一个对象就可以了)
    > 使用多线程的优点:
        1、提高程序执行速度,对图形化界面更有意义,可增强用户体验
        2、提高计算机系统CPU的利用率
        3、改善程序结构,将既长又复杂的进程分为多个线程,独立运行,利于理解和修改
 
一、线程的分类:
    > 用户线程
    > 守护线程:用它来服务用户线程的,通过在start()方法前调用thread.setDaemon(true)可以把一个用
       户线程编程守护线程, Java垃圾回收机制就是典型的守护进程
    > 若 JVM 中都是守护进程,则当前 JVM 将退出
 
二、线程的生命周期
1、新建:当一个Thread类或其子类的对象被声明并创建时,新生的线程对象处于新建状态
2、就绪:处于新建状态的线程被 start() 之后,将进行线程队列等待 CPU 时间片,此时已具备运行条件
3、运行:当就绪的线程被调度并获得处理器资源时,进入运行状态,run() 方法定义了线程的操作和功能
4、阻塞:被人为挂起或执行输入输出操作时,让出CPU 并临时中止自己的执行,进入阻塞状态
5、死亡:线程完成了他的全部工作或线程被提前强制性的中止
    > 图示
        
 
 
三、线程的同步机制
1、方式一:同步代码块
    > Synchronized的使用方法:
    synchronized(同步监视器){
        // 操作共享资源的代码(被同步的代码块)
    }
        > 同步监视器:由一个类的对象来充当,哪个线程获取此监视器,哪个线程就可以执行大括号里的代码
 
2、方式二:同步方法
    > 将操作共享数据的方法声明为 synchronized,即此方法为同步方法,能够保证当其中一个线程执行
       此方法时,其他线程在外等待直至此线程执行完此方法
 
四、线程通信
    > wait():令当前线程挂起并放弃CPU、同步资源,使别的线程可访问并修改共享资源,而当前线程排队
                    等候再次对资源的访问 
    > notify() :唤醒正在排队等待同步资源的线程中优先级最高者结束等待
    > notifyAll():唤醒正在排队等待资源的所有线程结束等待
    > java.lang.Object 提供的这三个方法只能在 synchronized 方法或 synchronized 代码块中才能使用,否
       则会报 java.lang.illegaMonitorStateException 异常
原文地址:https://www.cnblogs.com/kafeibuku/p/4988307.html