导图社区 Java多线程编程基础知识
Java多线程编程基础知识总结与复盘。本思维导图从Java多线程技能、对象及变量的并发访问、线程间的通信、Lock对象的使用、定时器Timer五个部分进行归纳整理。推荐收藏备用。
tomcat服务器整体模型和组成的各个级别组件介绍和作用分析
tomcat服务器组件connector组件的模型图、职责和组成的介绍
社区模板帮助中心,点此进入>>
python思维导图
Java日常技术
java中io流图解
Java继承与多态
职场必看!Java编程思想思维导图
python留言网站
Python入门
python基础知识点简单总结
J2EE复习大纲
《C语言程序设计》思维导图
Java多线程基础知识
1 Java多线程技能
1.1 进程和多进程概述
什么是进程
进程是受操作系统管理的基本运行单元
什么是线程
线程可以理解为在进程中独立运行的子任务
多线程有什么优点
大幅利用CPU的空闲时间来处理其他任务
什么场景下使用多线程技术
阻塞
依赖
业务之间无依赖
1.2 使用多线程
继承Thread类的创建新线程的局限
是不支持多继承
start()方法执行4个步骤
查看这些线程的状态与信息3个命令
jps+jstack.exe
jmc.exe
jvisualvm.exe
Servlet技术造成的非线程安全问题与解决方案
Servlet对象本身就是单例的,所以不要在Servlet中出现实例变量
1.3 currentThread()方法
run()和start()区别是什么
执行run()方法的线程
执行的时机
1.4 isAlive()方法
1.5 sleep(long millis)方法
1.6 sleep(long millis,int nanos)方法
1.7 StackTraceElement[] getStackTrace()方法
作用是什么
返回一个表示该线程堆栈跟踪元素数组。如果该线程尚未启动或已经终止,则该方法将返回一个零长度数组。如果返回的数组不是零长度的,则其第一个元素代表堆栈顶,它是该数组中最新的方法调用。最后一个元素代表堆栈底,是该数组中最旧的方法调用
怎么调用
Thread.currentThread().getStackTrace()
1.8 static void dumpStack()方法
是将当前线程的堆栈跟踪信息输出至标准错误流。该方法仅用于调试
1.9 static Map<Thread,StackTraceElement[]> getAllStackTraces()方法
返回所有活动线程的堆栈跟踪的一个映射。映射键是线程,而每个映射值都是一个StackTraceElement数组,该数组表示相应Thread的堆栈转储
1.10 getId()方法
1.11 停止线程
使正在运行的线程终止运行的3个方法
使用退出标志使线程正常退出
使用stop()方法强行终止线程
使用interrupt()方法中断线程
public static boolean interrupted():测试currentThread()是否已经中断
public boolean this.isInterrupted():测试this关键字所在类的对象是否已经中断
区别
1)this.interrupted():测试当前线程是否已经是中断状态,执行后具有清除状态标志值为false的功能
2)this.isInterrupted():测试线程Thread对象是否已经是中断状态,不清除状态标志
只标记为中断状态不真正停止线程
怎么停止线程
异常法
throw new InterruptedException();
interrupt()方法与“return;”语句结合
如何在sleep状态下停止线程
为什么不应该采用stop()方法停止线程
stop()方法容易造成业务处理的不确定性
使用stop()释放锁给数据造成不一致的结果
1.12 暂停线程
suspend()
resume()
这两个方法缺点是什么
独占
造成公共同步对象被独占,其他线程无法访问公共同步对象的结果
数据不完整
println的同步是什么
1.13 yield()方法
放弃当前的CPU资源
1.14 线程的优先级
1.15 守护线程
什么是守护线程
2 对象及变量的并发访问
2.1 synchronized同步方法
重入
支持继承
出现异常自动释放锁
holdsLock(Object obj)
2.2 synchronized同步语句块
类Class的单例性
String常量池特性致作为对象锁导致的意外
2.3 volatile关键字
Atomic原子类进行i++实现原子性的原理是什么
Atomic原子类出现逻辑混乱的原因是什么
怎么解决
重排序发生的条件的原因和条件是什么
3 线程间的通信
3.1 wait/notify机制
条件是什么
拥有相同锁的线程
只能在同步方法或同步块中调用
notify()方法释放锁的时机是什么
需要线程执行完同步区域代码
wait()方法释放锁的时机是什么
立即释放
sleep()方法释放锁的时机是什么
不释放
出现阻塞的5种情况是什么
notify/notifyAll唤醒的顺序取决于什么
怎么通过while循环和notifyAll解决溢出和“假死”问题
怎么通过标记实现交替执行
3.2 joins方法的使用
等待线程对象销毁
原理是什么
内部使用wait()方法进行等待
3.3 ThreadLocal的使用
3.4 InheritableThreadLocal的使用
4 Lock对象的使用
4.1 使用ReenTrantLock类
Condition类
await()
signal()
getHoldCount()方法的作用是什么
getQueueLength()方法的作用是什么
getWaitQueueLength(Condition condition)方法的作用是什么
hasQueuedThread(Thread thread)方法的作用是什么
hasQueuedThreads()方法的作用是什么
hasWaiters(Condition condition)方法的作用是什么
isFair()方法的作用是什么
isHeldByCurrentThread()方法的作用是什么
isLocked()方法的作用是什么
lockInterruptibly()方法的作用是什么
tryLock()方法的作用是什么
嗅探拿锁
tryLock(long timeout,TimeUnit unit)方法的作用是什么
4.2 使用ReenTrantReadWriteLock类
读写互斥
写读互斥
写写互斥
读读异步
5 定时器Timer
5.1 定时器Timer的使用