1 reentrantlock,synchronized区别?
第一:synchronized是一个关键字,而reentrantlock是一个类。
第二:synchronized是一个对象锁,锁的是对象;reentrantlock是通过aqs来实现的。
第三:reentrantlock可以设置为公平和非公平。
2 各自的使用场景?
竞争激烈的情况使用reentrantlock,竞争不激烈的情况是synchronized,因为synchronized在竞争不激烈的情况先是使用偏向锁-->轻量级锁-->重量级锁,在不激烈的情况效率比reentrantlock高。
3 java 线程有哪些状态?
4 new ThreadPool的参数含义?
coreSize: 最小线程数,或者说是核心线程数,也是线程池创建的时候预加载的线程数量。
maxSize:最大可以存在的线程数量,当队列满了的时候,还可以继续创建的线程最大值。
blockedqueue:阻塞队列。
第一:synchronouns 这是一个不存元素的同步队列,当线程的数量超过核心数量就需要新创建线程,最好也不要使用。
第二:linkedblockedqueue 这个是一个无界的队列,最好不要使用,可能会拖垮服务器。
第三:arrayblockedqueue 这个是一个有界队列。
RejectedExecutionHandler:拒绝策略。
第一:AbortPolicy默认的策略,抛异常
第二:DiscardPolicy 不处理
第三:DiscardOldestPolicy 将当前任务加入队列
第四:CallerRunsPolicy 执行当前任务
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作用?
作为线程本地变量。