java 多线程概述

线程
为什么要使用多线程?
    1.更多的处理器核心
    2.更快的响应时间
    3.更好的编程模型
线程优先级
默认优先级为5,数值越大,优先级越高

Linux和java线程的映射表
https://blog.csdn.net/memory_nothing/article/details/83017653
线程的六个状态
NEW             —— 线程创建,还没有调用start()方法
RUNNING         —— 运行中
BLOCKED         —— 阻塞状态,表示线程阻塞于锁
WAITING         —— 等待状态
TIME_WAITING    —— 超时等待,不同于WAITING,可以在指定时间内自行返回
TERMINATED      —— 终止状态
守护线程
暂时理解成辅助吧,当JVM中没有非守护线程时,JVM需要退出,所有守护线程终止(例如垃圾回收线程)
启动和终止线程
为什么弃用suspend()、resume()和stop()?
    1.以suspend()方法为例,在调用后,线程不会释放已经占有的资源(比如锁),而是占有着资源进入睡眠状态,这样容易引发死锁问题
    2.,stop()方法在终结一个线程时不会保证线程的资源正常释放,通常是没有给予线程完成资源释放工作的机会,因此会导致程序可能工作在不确定状态下
线程间通信
volatile和synchronized关键字
    关键字volatile可以用来修饰字段(成员变量),就是告知程序任何对该变量的访问均需要从共享内存中获取,而对它的改变必须同步刷新回共享内存,它能保证所有线程对变量访问的可见性
    关键字synchronized可以修饰方法或者以同步块的形式来进行使用,它主要确保多个线程在同一个时刻,只能有一个线程处于方法或者同步块中,它保证了线程对变量访问的可见性和排他性
等待/通知机制
为什么需要等待/通知机制?
    因为如果没有这个机制,程序需要不停的轮询去获取资源,为了避免轮询,会采取sleep(),但是此时会出现两个缺点:
        1.难以确保及时性
        2.难以降低开销

你可能感兴趣的:(java 多线程概述)