Java面试知识点之线程篇(三)

前言:这里继续对java线程相关知识点进行总结,不能间断。


1.yield()方法

yield()的作用是让步。它能让当前线程由“运行状态”进入到“就绪状态”,从而让其它具有相同优先级的等待线程获取执行权;但是,并不能保证在当前线程调用yield()之后,其它具有相同优先级的线程就一定能获得执行权;也有可能是当前线程又进入到“运行状态”继续运行。注意yield()方法并不会释放锁。

具体:

http://www.cnblogs.com/skywang12345/p/3479243.html

2.join()方法

join() 的作用:让“主线程”等待“子线程”结束之后才能继续运行。

参考:

http://www.cnblogs.com/skywang12345/p/3479275.html

3.interrupt()方法

interrupt()方法中断线程。注意这里的中断线程是中断正在阻塞的线程,使其抛出异常。

参考:

http://www.cnblogs.com/skywang12345/p/3479949.html

4.ReentrantLock的使用方法及注意点

注意:ReentrantLock默认为非公平锁,如需设置为公平锁,需要在构造函数中进行设置。

参考:

http://www.cnblogs.com/xrq730/p/4855538.html

5.关于读写锁

读写锁表示两个锁,一个是读操作相关的锁,称为共享锁;另一个是写操作相关的锁,称为排他锁

参考:

http://www.cnblogs.com/xrq730/p/4855631.html

6.生产者/消费者模型

生产者/消费者模型,在多线程中比较经典,生产者把产品放入中间仓库,消费者从仓库中把产品取出,平衡处理能力。

具体注意该模型中假死问题,单个生产者对多个消费者、多个生产者对单个消费者、多个生产者对多个消费者都可能出现假死。

参考:

http://www.cnblogs.com/xrq730/p/4855663.html

http://www.cnblogs.com/xrq730/p/4855857.html

http://www.cnblogs.com/skywang12345/p/3480016.html

7.线程优先级

Java中线程的优先级默认为5,其优先级范围为1~10,数字越大其优先级越高。“高优先级线程”会优于“低优先级线程”执行,表示获取CPU时间片的机会更大。

参考:

http://www.cnblogs.com/skywang12345/p/3479982.html

https://blog.csdn.net/u013256816/article/details/50392298

8.线程池的五种状态

线程池的状态与线程的状态有所不同,线程池的5种状态是:Running,SHUTDOWN,STOP,TIDYING,TERMINATED。

参考:

http://www.cnblogs.com/skywang12345/p/3509960.html

9.线程池的拒绝策略

线程池一共有四种拒绝策略:

1)AbortPolicy -- 当任务添加到线程池中被拒绝时,它将抛出 RejectedExecutionException 异常。

2)CallerRunsPolicy -- 当任务添加到线程池中被拒绝时,线程池会将被拒绝的任务添加到"线程池正在运行的线程"中取运行。

3)DiscardOldestPolicy -- 当任务添加到线程池中被拒绝时,线程池会放弃等待队列中最旧的未处理任务,然后将被拒绝的任务添加到等待队列中。

4)DiscardPolicy -- 当任务添加到线程池中被拒绝时,线程池将丢弃被拒绝的任务。

参考:

http://www.cnblogs.com/skywang12345/p/3512947.html

10.Semaphore信号量的使用

Semaphore是一个计数信号量,它的本质是一个"共享锁"。

信号量维护了一个信号量许可集。线程可以通过调用acquire()来获取信号量的许可;当信号量中有可用的许可时,线程能获取该许可;否则线程必须等待,直到有可用的许可为止。 线程可以通过release()来释放它所持有的信号量许可。

参考:

http://www.cnblogs.com/skywang12345/p/3534050.html

by Shawn Chen,2018.5.9日,下午。


相关内容

Java面试知识点之线程篇(一)

Java面试知识点之线程篇(二)

上一篇:关于SQLite的伪随机数


下一篇:[转]hql 语法与详细解释