1、概念
1、volatile:一写多读,保证子线程,字段的可见性;
2、synact:要用同一个不变的对象;
3、ThreadLocal:每个线程的都有副本,线程的隔离;
4、ThreadLocal内部有一个 ThreadLocal Map 中以ThreadLocal为 key;
5、wait():是 Object 的方法
6、wait()和 notify()一定要在 syn 内部执行;
7、一旦调用 对象.wait()方法,就释放锁;
8、一旦调用 对象. notify()/notifyAll()方法,不会释放锁;
9、ThreadLocal不安全?
2、线程的状态
Java中线程的状态分为6种:
- 初始(NEW):新创建了一个线程对象,但还没有调用start()方法。
- 运行(RUNNABLE):Java线程中将就绪(ready)和运行中(running)两种状态笼统的称为“运行”。
线程对象创建后,其他线程(比如main线程)调用了该对象的start()方法。该状态的线程位于可运行线程池中,等待被线程调度选中,获取CPU的使用权,此时处于就绪状态(ready)。就绪状态的线程在获得CPU时间片后变为运行中状态(running)。 - 阻塞(BLOCKED):表示线程阻塞于锁。
- 等待(WAITING):进入该状态的线程需要等待其他线程做出一些特定动作(通知或中断)。1
- 超时等待(TIMED_WAITING):该状态不同于WAITING,它可以在指定的时间后自行返回。
- 终止(TERMINATED):表示该线程已经执行完毕。
状态之间的变迁如下图所示
![](https://img.haomeiwen.com/i26777047/fdf36471b5e6cc90.jpeg)
3、死锁
是指两个或两个以上的进程在执行过程中,由于竞争资源或者由于彼此通信而造成的一种阻塞的现象,若无外力作用,它们都将无法推进下去。此时称系统处于死锁状态或系统产生了死锁。
死锁的发生必须具备以下四个必要条件。
1)互斥条件:指进程对所分配到的资源进行排它性使用,即在一段时间内某资源只由一个进程占用。如果此时还有其它进程请求资源,则请求者只能等待,直至占有资源的进程用毕释放。
2)请求和保持条件:指进程已经保持至少一个资源,但又提出了新的资源请求,而该资源已被其它进程占有,此时请求进程阻塞,但又对自己已获得的其它资源保持不放。
3)不剥夺条件:指进程已获得的资源,在未使用完之前,不能被剥夺,只能在使用完时由自己释放。
4)环路等待条件:指在发生死锁时,必然存在一个进程——资源的环形链,即进程集合{P0,P1,P2,···,Pn}中的P0正在等待一个P1占用的资源;P1正在等待P2占用的资源,……,Pn正在等待已被P0占用的资源。
理解了死锁的原因,尤其是产生死锁的四个必要条件,就可以最大可能地避免、预防和解除死锁。
注意:只要打破四个必要条件之一就能有效预防死锁的发生。
4、活锁
两个线程在尝试拿锁的机制中,发生多个线程之间互相谦让,不断发生同一个线程总是拿到同一把锁,在尝试拿另一把锁时因为拿不到,而将本来已经持有的锁释放的过程。
解决办法:每个线程休眠随机数,错开拿锁的时间。
5、线程饥饿
低优先级的线程,总是拿不到执行时间
6、ThreadLocal辨析与Synchonized的比较
ThreadLocal和Synchonized都用于解决多线程并发訪问。可是ThreadLocal与synchronized有本质的差别。synchronized是利用锁的机制,使变量或代码块在某一时该仅仅能被一个线程訪问。而ThreadLocal为每个线程都提供了变量的副本,使得每个线程在某一时间訪问到的并非同一个对象,这样就隔离了多个线程对数据的数据共享。
7、Fork-Join
![](https://img.haomeiwen.com/i26777047/e4997c0171d551bc.png)
![](https://img.haomeiwen.com/i26777047/68acea704e5c8e2a.png)
8、CountDownLatch的作用、应用场景和实战
![](https://img.haomeiwen.com/i26777047/fbf8fa181b8e7f4b.png)
9、CyclicBarrier的作用、应用场景和实战
![](https://img.haomeiwen.com/i26777047/3384abe7d82a8eb2.png)
10、Semaphore的作用、应用场景和实战
![](https://img.haomeiwen.com/i26777047/296562e23193999d.png)
11、Exchange的作用、应用场景和实战
![](https://img.haomeiwen.com/i26777047/312d63280611e4aa.png)
12、Callable、Future和FutureTask
![](https://img.haomeiwen.com/i26777047/16d3fb676def4198.png)
网友评论