1 reentrantlock,synchronized區(qū)別?
第一:synchronized是一個關(guān)鍵字,而reentrantlock是一個類。
第二:synchronized是一個對象鎖芜茵,鎖的是對象;reentrantlock是通過aqs來實現(xiàn)的倡蝙。
第三:reentrantlock可以設(shè)置為公平和非公平九串。
2 各自的使用場景?
競爭激烈的情況使用reentrantlock寺鸥,競爭不激烈的情況是synchronized猪钮,因為synchronized在競爭不激烈的情況先是使用偏向鎖-->輕量級鎖-->重量級鎖,在不激烈的情況效率比reentrantlock高胆建。
3 java 線程有哪些狀態(tài)烤低?
4 new ThreadPool的參數(shù)含義?
coreSize: 最小線程數(shù)笆载,或者說是核心線程數(shù)扑馁,也是線程池創(chuàng)建的時候預(yù)加載的線程數(shù)量。
maxSize:最大可以存在的線程數(shù)量凉驻,當(dāng)隊列滿了的時候腻要,還可以繼續(xù)創(chuàng)建的線程最大值。
blockedqueue:阻塞隊列沿侈。
第一:synchronouns 這是一個不存元素的同步隊列闯第,當(dāng)線程的數(shù)量超過核心數(shù)量就需要新創(chuàng)建線程市栗,最好也不要使用缀拭。
第二:linkedblockedqueue 這個是一個無界的隊列,最好不要使用填帽,可能會拖垮服務(wù)器蛛淋。
第三:arrayblockedqueue 這個是一個有界隊列。
RejectedExecutionHandler:拒絕策略篡腌。
第一:AbortPolicy默認(rèn)的策略褐荷,拋異常
第二:DiscardPolicy 不處理
第三:DiscardOldestPolicy 將當(dāng)前任務(wù)加入隊列
第四:CallerRunsPolicy 執(zhí)行當(dāng)前任務(wù)
5 線程的創(chuàng)建方式?
第一: extends thread
第二: implements runnable
6 newFixedThreadPool, newCachedThreadPool有什么區(qū)別?
newFixedThreadPool線程數(shù)量可以設(shè)置嘹悼,newCachedThreadPool不可以設(shè)置默認(rèn)就是1
7 Executors中FixedThreadPool叛甫,設(shè)置5個的大小层宫,同時submit 10個任務(wù),是怎么執(zhí)行的其监?
第一:FixedThreadPool是一個core==max的配置萌腿,所有設(shè)置為5,意思就是core=max==5
第二:FixedThreadPool的隊列是無界的linkedblockedqueue抖苦,線程使用完了就會放到隊列里面
所以毁菱,執(zhí)行的過程應(yīng)該是:首先會有5個線程去執(zhí)行任務(wù),然后另外5個任務(wù)被放到隊列里面锌历。
我看網(wǎng)上有不同意見這個可以相互討論一下贮庞。
8 volatile的作用?
第一:禁止指令重排序
第二:保證可見性究西,但不保證原子性窗慎。
9 線程A調(diào)用線程B sleep方法,哪個線程睡眠卤材?
當(dāng)前線程sleep捉邢,而當(dāng)前線程,指的是A線程
10 sleep() 和wait() 有什么區(qū)別商膊?
第一:sleep是當(dāng)前線程睡眠一段時間伏伐,當(dāng)時間到了之后,自動喚醒晕拆;wait是需要notify才可以喚醒的藐翎。
第二:sleep屬于thread里面的方面;而wait是屬于object的方法
第三:sleep在休眠的時候如果加了鎖实幕,是不會放棄鎖的吝镣,wait之后就會釋放掉鎖。
11 execute(),submit()區(qū)別昆庇?
execute()方法的執(zhí)行是沒有返回值的末贾;submit()是有返回值,為什么呢整吆?因為submit傳入的是callable拱撵,是可以拿到返回值的。
12 ThreadLocal作用表蝙?
作為線程本地變量拴测。