美文网首页面试相关
造火箭基础篇-线程

造火箭基础篇-线程

作者: 小鱼嘻嘻 | 来源:发表于2017-12-10 16:43 被阅读9次

    1 reentrantlock,synchronized区别?
    第一:synchronized是一个关键字,而reentrantlock是一个类。
    第二:synchronized是一个对象锁,锁的是对象;reentrantlock是通过aqs来实现的。
    第三:reentrantlock可以设置为公平和非公平。
    2 各自的使用场景?
    竞争激烈的情况使用reentrantlock,竞争不激烈的情况是synchronized,因为synchronized在竞争不激烈的情况先是使用偏向锁-->轻量级锁-->重量级锁,在不激烈的情况效率比reentrantlock高。
    3 java 线程有哪些状态?


    image.png

    4 new ThreadPool的参数含义?
    coreSize: 最小线程数,或者说是核心线程数,也是线程池创建的时候预加载的线程数量。
    maxSize:最大可以存在的线程数量,当队列满了的时候,还可以继续创建的线程最大值。
    blockedqueue:阻塞队列。
    第一:synchronouns 这是一个不存元素的同步队列,当线程的数量超过核心数量就需要新创建线程,最好也不要使用。
    第二:linkedblockedqueue 这个是一个无界的队列,最好不要使用,可能会拖垮服务器。
    第三:arrayblockedqueue 这个是一个有界队列。
    RejectedExecutionHandler:拒绝策略。
    第一:AbortPolicy默认的策略,抛异常
    第二:DiscardPolicy 不处理
    第三:DiscardOldestPolicy 将当前任务加入队列
    第四:CallerRunsPolicy 执行当前任务


    image.png

    5 线程的创建方式?
    第一: extends thread
    第二: implements runnable
    6 newFixedThreadPool, newCachedThreadPool有什么区别?
    newFixedThreadPool线程数量可以设置,newCachedThreadPool不可以设置默认就是1
    7 Executors中FixedThreadPool,设置5个的大小,同时submit 10个任务,是怎么执行的?
    第一:FixedThreadPool是一个core==max的配置,所有设置为5,意思就是core=max==5
    第二:FixedThreadPool的队列是无界的linkedblockedqueue,线程使用完了就会放到队列里面
    所以,执行的过程应该是:首先会有5个线程去执行任务,然后另外5个任务被放到队列里面。
    我看网上有不同意见这个可以相互讨论一下。
    8 volatile的作用?
    第一:禁止指令重排序
    第二:保证可见性,但不保证原子性。
    9 线程A调用线程B sleep方法,哪个线程睡眠?
    当前线程sleep,而当前线程,指的是A线程
    10 sleep() 和wait() 有什么区别?
    第一:sleep是当前线程睡眠一段时间,当时间到了之后,自动唤醒;wait是需要notify才可以唤醒的。
    第二:sleep属于thread里面的方面;而wait是属于object的方法
    第三:sleep在休眠的时候如果加了锁,是不会放弃锁的,wait之后就会释放掉锁。
    11 execute(),submit()区别?
    execute()方法的执行是没有返回值的;submit()是有返回值,为什么呢?因为submit传入的是callable,是可以拿到返回值的。
    12 ThreadLocal作用?
    作为线程本地变量。

    相关文章

      网友评论

        本文标题:造火箭基础篇-线程

        本文链接:https://www.haomeiwen.com/subject/xehvixtx.html