在 Java 中创建线程的三种方式
1) 继承 Thread
2) 实现 Runnable 接口
3)实现 Callable 接口
同步与死锁
1) 同步方法 同步监视器为当前对象 this;Synchronized
2) 同步代码块(同步监视器/共享资源的对象){};Synchronized
3)Lock 锁:对需要上锁的地方上锁
Lock 与 synchronized 的区别
1) Lock 是 显 示 锁 (手 动 开 启 和 关 闭 锁 ,别 忘 关 闭锁),synchronized 是隐式锁
2) Lock 只有代码块锁,synchronized 有代码块锁和方法锁
3) 使用 Lock 锁,JVM 将花费较少的时间来调度线程,性能更好,并且具有更好的扩展性(提供更多的子类)
4) Lock 确保当一个线程位于代码的临界区时,另一个线程不进入临界区
过多的同步就会导致死锁
线程间的通信
1) wait()
2) notify()
3) notifyAll()
4)lock()
5)unlock()
线程池:存放线程的空间
创建好多个线程,放入线程池中,使用时直接获取引用,不使用时放回池中。可以避免频繁创建销毁、实现重复利用
1) 提高响应速度(减少了创建新线程的时间)
2) 降低资源消耗(重复利用线程池中线程,不需要每次都创建)
3) 提高线程的可管理性:避免线程无限制创建、从而销毁系统资源,降低系统稳定性,甚至内存溢出或者 CPU 耗尽
任务调度 Task_Timer
任务:就是事情
调度:在不同的时间点或者在指定的时间点或者间隔多长时间我去运行这个任务
ThreadLocal
直译为“本地线程”,其实它就是一容器,用于存放线程的局部变量
作用:为解决多线程程序的并发问题
ThreadLocal 的使用场景为:用来解决数据库连接、Session管理等