• Java线程常见面试题


    多线程实现手段:

    (1)、继承Thread类 (2)实现Runable接口 (3)使用线程池

    线程控制在那个包:java.util.concurrent。

    (1)提供了线程的运行、(2)线程池的创建、 (3)线程生命周期的控制

    线程池java.util.concurrent.Executors创建线程池的四种方法

    (1) newCachedThreadPool创建非固定数量,可缓存的线程池,若线程池超过处理需要,可灵活回收空线程,若没有线程可回收,则建新

    (2) newFixedThreadPool固定线程池,底层是无界队列,可控制最大并发数,超出的线程会在队列中等待
    (3) newScheduledThreadPool定时执行线程池,支持定时及周期性任务执行
    (4) newSingleThreadExecutor单线程化的线程池,只会用唯一的工作线程来执行任务,保证所有任务按照顺序执行如果这个唯一的线程因为异常结束,那么会有一个新的线程来替代它

    Sleep()和 Wait()的区别

    (1) Sleep()是Thread的方法,Wait()是Object的方法

    (2) Sleep(休眠)暂停指定时间,执行是CPU让出来,但对象锁继续保持。休眠时间到之后自动回复就绪状态。Wait(线程暂停执行)当前线程放弃对象锁,进入等待池,调用notify() 或者 notifyall()的时候再重新获得对象锁进入就绪状态

    线程的sleep()方法和yield()方法有什么区别?

    (1) sleep()方法给其他线程运行机会时不考虑线程的优先级,因此会给低优先级的线程以运行的机会;yield()方法只会给相同优先级或更高优先级的线程以运行的机会 
    (2) 线程执行sleep()方法后转入阻塞(blocked)状态,而执行yield()方法后转入就绪(ready)状态 
    (3) sleep()方法声明抛出InterruptedException,而yield()方法没有声明任何异常; 

    Notify()与NotifyAll()

    notify():唤醒一个处于等待状态的线程,当然在调用此方法的时候,并不能确切唤醒某一个等待状态的线程,而是JVM确定唤醒哪个线程而且与优先级无关 
    notityAll():唤醒所有处于等待状态的线程,该方法并不是将对象的锁给所有线程,而是让它们竞争,只有获得锁的线程才能进入就绪

    什么是线程池

    (1)面向对象编程创建销毁对象耗费时间(资源申请,对象的销毁后进入垃圾回收)

    (2)为了减少创建销毁对象,采用了线程池。先放入若干个线程,用的时候不在创建到里面拿,使用完毕不销毁,继续放回池中,减少创建和销毁的开销。

  • 相关阅读:
    rgba 和opacity的透明效果有什么不同
    定位 盒模型 浮动 css优先级 伪类伪元素选择器---未完成
    JS中Date对象getYear()方法和getFullYear()方法区别
    Javascript错误提示--SyntaxError: Illegal return statement
    JavaScript高级程序设计-第六章面向对象的程序设计(复习)
    为什么js加事件时不要写括号
    JS函数是如何执行的
    关于JS的总结
    我所知道的数据库6-DDL语言(续)
    我所知道的数据库5-DDL语言
  • 原文地址:https://www.cnblogs.com/karrya/p/11496045.html
Copyright © 2020-2023  润新知