扫码关注公众号
java线程的创建方式有哪些?
①继承Thread类并重写run方法。实现简单,但不符合里氏替换原则,不可以继承其他类。②实现Runnable接口并重写run方法。避免了单
volatile关键字是否能保证线程安全?
不能。volatile关键字用在多线程同步中,可保证读取的可见性,JVM只是保证从主内存加载到线程工作内存的值是最新的读取值,而非cache
请列举一下启动线程有哪几种方式,之后再说明一下线程池的种类都有哪些?
要启动的可以分为两类:返回结果和不返回结果。对于这两种,也分别有两种启动线程的方式:1)继承Thread类,重载run()2)实现Runnable接口,实现run()3)实现Callable接口通过FutureTask包装器来创建Thread线程、使用ExecutorService、Callable、Future实现有返回结果的线程常用方法:1.newCachedThreadPool()2.newFixedThreadPool(intnThreads)3.newSingleThreadExecutor()4.newScheduleThreadPool()5.newWorkStealingPool(intparallelism)
Java线程池的工作流程
线程池中的执行流程:(1)当线程数小于核心线程数的时候,使用核心线程数。(2)如果核心线程数小于线程数,就将多余的线程放入任务队列(阻塞队列)中(3)当任务队列(阻塞队列)满的时候,就启动最大线程数.(4)当最大线程数也达到后,就将启动拒绝策略。