多线程知识点总结

java多线程中一些零碎的知识点总结

LockSupport

它在线程类任意位置让线程阻塞,和Thread.suspend()相比,弥补了resume()提前发生,导致线程无法继续执行的情况。和Object.wait()相比,它不需要先获得对象的锁,也不会跑出InterruptedException异常,
方法:
part();
parkNanos()
parkUntil();
part(Object);

LockSupport为每一个线程准备了一个许可,默认不可用,如果可用park()函数会返回,并消费这个许可,如果不可用就会阻塞,unpark()会使得这个许可可用。

park()的挂起状态不会像suspend()那么给出令人费解的Runnable状态,而是WAITING状态,还会标注是part()引起的。
还可以使用park(Object) 在当前线程中设置一个阻塞对象,用于分析线程阻塞用。

LockSupport还能支持中断影响,但是LockSupport.park()不会跑出InterruptedException 异常,只会默默返回。配合上Thread.interrupted()方法可以获得中断标记,执行中断处理。

线程池

使用submit(Runnable)方法执行任务,线程池可能会吃掉程序跑出的异常,改用execute(Runnable)方法执行任务,或者Future future = submit(Runnable);future.get()执行任务。另外还可以扩展线程池,包装一个新的Runnable扑捉异常。

坚持原创技术分享,您的支持将鼓励我继续创作!

热评文章

Fork me on GitHub