91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

怎么使用chatgpt解決隱藏的bug

發布時間:2023-04-13 09:34:50 來源:億速云 閱讀:111 作者:iii 欄目:開發技術

本篇內容主要講解“怎么使用chatgpt解決隱藏的bug”,感興趣的朋友不妨來看看。本文介紹的方法操作簡單快捷,實用性強。下面就讓小編來帶大家學習“怎么使用chatgpt解決隱藏的bug”吧!

隱藏的“間諜”

下面先來看代碼(偽代碼)

code

/**
 * 兩個從數據庫查詢的耗時任務
 * @param countDownLatch
 * @param all
 */
public static void testCount(CountDownLatch countDownLatch, List<String> all) {
    for (int i = 0; i < 2; i++) {
        int finalI = i;
        ThreadPoolFactory.getGeneral().execute(() -> {
            try {
                List<String> countList = new ArrayList<>();
                //這里之所以用for循環,是因為查詢業務需要0和1兩個狀態去查詢
                if (finalI == 0) {
                //這里其實是查詢數據庫的mapper操作,為了方便演示
                    countList.add("1");
                    countList.add("2");
                    countList.add("3");
                } else {
                //這里其實是查詢數據庫的mapper操作,為了方便演示
                    countList.add("5");
                    countList.add("6");
                    countList.add("7");
                    countList.add("8");
                }
                if (countList != null) {
                    all.addAll(countList);
                }
            } catch (Exception ex) {
                ex.printStackTrace();
            } finally {
                countDownLatch.countDown();
            }
        });
    }
}
//線程池類
public class ThreadPoolFactory {
    private static final Logger logger = LoggerFactory.getLogger(ThreadPoolFactory.class);
    private static final ThreadFactory GENERAL_THREAD_FACTORY = new ThreadFactoryBuilder().setNameFormat("general-pool-%d").build();
    /**
     * corePoolSize:核心線程池大小
     * maximumPoolSize:最大線程池大小
     * keepAliveTime:線程最大空閑時間
     * unit:時間單位
     * workQueue:線程等待隊列  四種隊列 1.ArrayBlockingQueue:有界隊列,2.SynchronousQueue:同步隊列,3.LinkedBlockingQueue:無界隊列,4.DelayQueue:延時阻塞隊列
     * threadFactory:線程創建工廠
     * handler:拒絕策略 四種策略 1.ThreadPoolExecutor.AbortPolicy():2.ThreadPoolExecutor.CallerRunsPolicy():3.ThreadPoolExecutor.DiscardOldestPolicy():4.ThreadPoolExecutor.DiscardPolicy()
     */
    private static final ExecutorService GENERAL = new ThreadPoolExecutor(5, 10,
            30L, TimeUnit.MILLISECONDS,
            new LinkedBlockingQueue<>(4096), GENERAL_THREAD_FACTORY, new ThreadPoolExecutor.AbortPolicy());
    public static ExecutorService getGeneral() {
        return GENERAL;
    }
}
//main方法測試
public static void main(String[] args) throws Exception {
    List<String> all = new ArrayList<>();
    CountDownLatch countDownLatch = new CountDownLatch(2);
    testCount(countDownLatch,all);
    countDownLatch.await(10, TimeUnit.SECONDS);
    System.out.println(all);
}

對于上面CountDownLatch不了解的的可以看下我歷史的文章: 干貨!CountDownLatch的使用場景

看到這里不知道你們能否看出端倪,先說問題結果吧,最后的這個all集合為空,生產上的接口也是同樣的問題,我上面的代碼是和生產上的1:1復制的偽代碼。

我先說下我的排查思路:

1、線程池問題,我認為是線程沒有被及時的回收,時間太長,并發數過高,導致線程不夠用,第一想到的是便是線程數需要增加

2、數據庫數據過多,導致查詢比以前慢出一個量級,最后隊列阻塞,拖垮線程(這個概率比較低,因為數據庫查詢很快返回,并沒有需要優化的慢sql)

3、懷疑是這個循環造成的,比如某種機制少循環或者不循環,去掉for循環依然沒解決問題

驗證第一位”間諜“

首先擴大核心線程數和最大線程數,將這倆參數擴大為10和20

private static final ExecutorService GENERAL = new ThreadPoolExecutor(10, 20,
            30L, TimeUnit.MILLISECONDS,
            new LinkedBlockingQueue<>(4096), GENERAL_THREAD_FACTORY, new ThreadPoolExecutor.AbortPolicy());

擴大之后,放上去能查出數據了,感覺解決了這個大問題

那句話怎么說來著,真相往往不是那么的容易發現,最先抓到的都是小魚小蝦,果不其然,運行了一周左右,同樣的問題又出現了,感覺這就是一水缸,你把水缸變大,終有蓄滿的一天。我們都知道,線程池可不是越大越好。

那么真相究竟是什呢,看到這里的小伙伴如果你已經有了答案,可以先去評論區評論,不要看下面的答案。

借助GPT“偵探柯南”

chatgpt這里我就不多說了,這個東西如果現在還不了解的,那我就。。。就只能求求你趕緊去了解下吧

怎么使用chatgpt解決隱藏的bug

我把生產上的代碼完整的貼上去,他是這樣回答的

怎么使用chatgpt解決隱藏的bug

不得不說,一語中的,僅5秒就把我們所能想到和不能想到的都回答出來了

  • 很顯然,第二點,第三點我們基本上驗證通過了

  • 那就是第一點了,其實我們早就應該想到這一點的,多線程環境下,線程安全問題是首位的!!!

找出"真兇"

使用synchronized關鍵字解決線程安全

怎么使用chatgpt解決隱藏的bug

使用synchronized關鍵字來同步訪問all列表,即在多個線程訪問all列表時,使用同一個鎖來保證線程安全,避免出現數據不一致的問題。這樣就解決了多個線程可能會同時訪問并修改數據,導致數據丟失或損壞的問題。

聰明的你有沒有找出“真兇”呢???

還記得我們加大線程數來解決問題嗎,我又問了一個問題

怎么使用chatgpt解決隱藏的bug

擴大線程池的參數可能會提高程序的并發處理能力,但并不能從根本上解決問題。如果是由于數據同步問題導致的線程池查不到數據,那么擴大線程池只是把問題暫時推遲了而已。此外,擴大線程池的核心線程池數量也會占用更多的系統資源

到此,相信大家對“怎么使用chatgpt解決隱藏的bug”有了更深的了解,不妨來實際操作一番吧!這里是億速云網站,更多相關內容可以進入相關頻道進行查詢,關注我們,繼續學習!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

西盟| 沾益县| 锦屏县| 得荣县| 宿迁市| 德州市| 太湖县| 九龙县| 德令哈市| 类乌齐县| 新平| 钦州市| 鹤壁市| 安徽省| 杭州市| 开远市| 锡林郭勒盟| 涟源市| 丰镇市| 武鸣县| 宣城市| 镇远县| 金塔县| 大石桥市| 中方县| 赤水市| 鄂温| 芷江| 马公市| 金平| 沙田区| 离岛区| 外汇| 上杭县| 新巴尔虎左旗| 普宁市| 闽清县| 密山市| 维西| 微山县| 仪征市|