线程
为什么要使用多线程?
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.难以降低开销
网友评论