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

歡迎訪問 生活随笔!

生活随笔

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

编程问答

AtomicInteger使用非阻塞算法,实现并发控制多线程实现售票

發布時間:2023/12/10 编程问答 35 豆豆
生活随笔 收集整理的這篇文章主要介紹了 AtomicInteger使用非阻塞算法,实现并发控制多线程实现售票 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
代碼如下: public class TicketDemo implements Runnable {private static volatile AtomicInteger ticketSum = new AtomicInteger(20);private static int finalTotal = 0;@Overridepublic void run() {int count;while ((count = ticketSum.decrementAndGet()) >= 0) {System.out.println(Thread.currentThread().getName() + "賣出了第" + ++count + "張票");finalTotal++;}}public static void main(String[] args) {Thread t1 = new Thread(new TicketDemo(), "t1");Thread t2 = new Thread(new TicketDemo(), "t2");Thread t3 = new Thread(new TicketDemo(), "t3");long startTime = System.currentTimeMillis();t1.start();t2.start();t3.start();while (true) {if (!t1.isAlive() && !t2.isAlive() && !t3.isAlive()) {long endTime = System.currentTimeMillis();System.out.println("最終售出:" + finalTotal);System.out.println("最終耗時:" + (endTime - startTime) + "毫秒.");break;}}} }

總結:

多線程必須加上synchronized,保證不會出現并發線程同時訪問的情況,而在AtomicInteger中卻不用加上synchronized,AtomicInteger是一個提供原子操作的Integer類,通過線程安全的方式操作加減,AtomicInteger是在使用非阻塞算法實現并發控制,在一些高并發程序中非常適合,但并不能每一種場景都適合,不同場景要使用使用不同的數值類。

以上為AtomicInteger中的部分源碼,在這里說下其中的value,這里value使用了volatile關鍵字,volatile在這里可以做到的作用是使得多個線程可以共享變量,但是問題在于使用volatile將使得VM優化失去作用,導致效率較低,所以要在必要的時候使用,因此AtomicInteger類不要隨意使用,要在使用場景下使用。

總結

以上是生活随笔為你收集整理的AtomicInteger使用非阻塞算法,实现并发控制多线程实现售票的全部內容,希望文章能夠幫你解決所遇到的問題。

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