日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

java线程自带队列的使用以及线程阻塞

發布時間:2023/12/20 编程问答 32 豆豆
生活随笔 收集整理的這篇文章主要介紹了 java线程自带队列的使用以及线程阻塞 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

java線程,設置隊列的大小實現隊列阻塞

public class QueueThreads {private static int nThreads = 4;//Runtime.getRuntime().availableProcessors() * 2 + 1;private static BlockingQueue<Runnable> queue = new ArrayBlockingQueue<Runnable>(4);//隊列值大小設置為4private static ExecutorService executors = new ThreadPoolExecutor(nThreads, nThreads, 0L, TimeUnit.MILLISECONDS, queue, new ThreadFactory() {private final String threadNamePrefix = "si_query_task_";private final AtomicInteger count = new AtomicInteger(1);@Overridepublic Thread newThread(Runnable r) {Thread t = new Thread(Thread.currentThread().getThreadGroup(), r, threadNamePrefix + count.getAndIncrement());//t.setDaemon(true);return t;}});public static void main(String[] args) {for (int i = 0; i < 10; i++) {try {executors.execute(new Thread(new ThreadPoolTest(), "TestThread".concat("" + i)));int threadSize = queue.size();System.out.println("線程隊列大小為-->" + threadSize);} catch(RejectedExecutionException e){System.out.println("阻塞異常");}catch (Exception e) {System.out.println("異常");}}executors.shutdown();}public void run() {synchronized (this) {try {System.out.println("線程名稱:" + Thread.currentThread().getName());Thread.sleep(3000); //休眠是為了讓該線程不至于執行完畢后從線程池里釋放} catch (InterruptedException e) {//e.printStackTrace(); }}}}

?

本測試程序的隊列設置為4,線程池的大小為4,循環開啟10個任務執行結果:

分析:有8個任務執行成功了,線程處理完成立馬會處理新的任務,但是出現了兩個阻塞異常,原因是這兩個任務來不及創建就被阻塞了,阻塞的結果就是丟棄。

?

轉載于:https://www.cnblogs.com/zyf-yxm/p/10436142.html

創作挑戰賽新人創作獎勵來咯,堅持創作打卡瓜分現金大獎

總結

以上是生活随笔為你收集整理的java线程自带队列的使用以及线程阻塞的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。