ÀÖÓãµç¾º

½ÌÓýÐÐÒµA¹ÉIPOµÚÒ»¹É£¨¹ÉƱ´úÂë 003032£©

È«¹ú×Éѯ/ͶËßÈÈÏߣº400-618-4000

JavaÅàѵ£ºÊ²Ã´ÊÇËøÏû³ýºÍËø´Ö»¯?

¸üÐÂʱ¼ä:2023Äê03ÔÂ28ÈÕ13ʱ56·Ö À´Ô´:ÀÖÓãµç¾º ä¯ÀÀ´ÎÊý:

ºÃ¿Ú±®ITÅàѵ

¡¡¡¡ËøÏû³ýºÍËø´Ö»¯ÊÇÁ½ÖÖÓÅ»¯¼¼Êõ£¬ÓÃÓÚÌá¸ß¶àÏ̳߳ÌÐòµÄÐÔÄÜ¡£

¡¡¡¡ËøÏû³ý(Lock Elimination)ÊÇÖ¸ÔÚ±àÒëÆ÷»òÕßÔËÐÐʱ»·¾³ÖУ¬¶ÔÓÚÄ³Ð©ÌØ¶¨µÄ´úÂëÆ¬¶Î£¬Èç¹û¿ÉÒÔÈ·¶¨²»»á·¢Éú²¢·¢³åÍ»£¬¾Í¿ÉÒÔÊ¡ÂÔµô¶ÔÓ¦µÄËø²Ù×÷£¬´Ó¶øÌá¸ß³ÌÐòµÄÔËÐÐЧÂÊ¡£

¡¡¡¡Ëø´Ö»¯(Lock Coarsening)ÊÇÖ¸ÔÚ±àÒëÆ÷»òÕßÔËÐÐʱ»·¾³ÖУ¬¶ÔÓÚÁ¬ÐøµÄ¶à¸öËø²Ù×÷£¬½«ÆäºÏ²¢³ÉÒ»¸öËø²Ù×÷£¬´Ó¶ø¼õÉÙËøµÄÁ£¶È£¬Ìá¸ß³ÌÐòµÄÔËÐÐЧÂÊ¡£

¡¡¡¡ÏÂÃæÊÇÁ½¸ö¼òµ¥µÄʾÀý£º

¡¡¡¡1.ËøÏû³ý

public class LockEliminationDemo {
    public static void main(String[] args) {
        StringBuilder sb = new StringBuilder();
        for (int i = 0; i < 1000000; i++) {
            sb.append(i);
        }
        System.out.println(sb.toString());
    }
}

¡¡¡¡ÔÚÕâ¸öʾÀýÖУ¬ÓÉÓÚ StringBuilder µÄÄÚ²¿ÊµÏÖ²¢²»ÊÇḬ̈߳²È«µÄ£¬ËùÒÔÔÚ¶àÏ̻߳·¾³Ï±ØÐëʹÓÃËøÀ´±£Ö¤²Ù×÷µÄÕýÈ·ÐÔ¡£µ«ÊÇ£¬ÓÉÓÚÔÚÕâ¸ö³ÌÐòÖÐÖ»ÓÐÒ»¸öÏß³Ì¶Ô StringBuilder ½øÐÐÁ˲Ù×÷£¬Òò´Ë±àÒëÆ÷¿ÉÒÔͨ¹ýÊý¾ÝÁ÷·ÖÎö¼¼ÊõÅжϳö²»´æÔÚ²¢·¢³åÍ»£¬´Ó¶ø½«¶ÔÓ¦µÄËø²Ù×÷Ïû³ýµô£¬´Ó¶øÌá¸ß³ÌÐòµÄÔËÐÐЧÂÊ¡£

¡¡¡¡2.Ëø´Ö»¯

public class LockCoarseningDemo {
    public static void main(String[] args) {
        Object lock = new Object();
        for (int i = 0; i < 1000000; i++) {
            synchronized (lock) {
                doSomething(i);
            }
        }
    }

    private static void doSomething(int i) {
        // do something
    }
}

¡¡¡¡ÔÚÕâ¸öʾÀýÖУ¬ÓÉÓÚ synchronized ¿éµÄÁ£¶È·Ç³£Ð¡£¬Ã¿´ÎÖ»°üº¬ÁËÒ»¸ö·½·¨µ÷Óã¬Òò´Ë»áµ¼Ö´óÁ¿µÄËø²Ù×÷£¬´Ó¶ø½µµÍ³ÌÐòµÄÔËÐÐЧÂÊ¡£ÎªÁ˱ÜÃâÕâÖÖÇé¿ö£¬±àÒëÆ÷¿ÉÒÔ½«Á¬ÐøµÄ¶à¸ö synchronized ¿éºÏ²¢³ÉÒ»¸ö¸ü´óµÄ synchronized ¿é£¬´Ó¶ø¼õÉÙËøµÄÁ£¶È£¬Ìá¸ß³ÌÐòµÄÔËÐÐЧÂÊ¡£ÀýÈ磬¿ÉÒÔ½«ÉÏÊöʾÀýÖÐµÄ synchronized ¿é¸ÄΪÈçÏÂÐÎʽ£º

public class LockCoarseningDemo {
    public static void main(String[] args) {
        Object lock = new Object();
        synchronized (lock) {
            for (int i = 0; i < 1000000; i++) {
                doSomething(i);
            }
        }
    }

    private static void doSomething(int i) {
        // do something
    }
}

¡¡¡¡¶ÔÓÚËøÏû³ý£¬ËüµÄÔ­ÀíÊÇͨ¹ý¶Ô³ÌÐòµÄ´úÂë½øÐÐÊý¾ÝÁ÷·ÖÎö£¬ÅжϳöÔÚijЩÇé¿öϲ»´æÔÚ²¢·¢³åÍ»£¬´Ó¶øÊ¡ÂÔ¶ÔÓ¦µÄËø²Ù×÷¡£ÕâÖÖÓÅ»¯¼¼ÊõÖ÷ÒªÊÊÓÃÓÚ¾Ö²¿±äÁ¿»òÕß·½·¨²ÎÊýµÈ·¶Î§½ÏСµÄ¶ÔÏó£¬ÒòΪÕâЩ¶ÔÏóÔÚ¶àÏ̻߳·¾³ÏµÄʹÓñȽÏÈÝÒ×·ÖÎö¡£ÀýÈçÔÚÉÏÃæµÄʾÀýÖУ¬StringBuilder ¶ÔÏóµÄʹÓ÷¶Î§½ÏС£¬Òò´Ë±àÒëÆ÷¿ÉÒÔºÜÈÝÒ׵طÖÎö³ö²»´æÔÚ²¢·¢³åÍ»¡£

¡¡¡¡¶ÔÓÚËø´Ö»¯£¬ËüµÄÔ­ÀíÊÇͨ¹ý½«¶à¸öÁ¬ÐøµÄËø²Ù×÷ºÏ²¢³ÉÒ»¸ö¸ü´óµÄËø²Ù×÷£¬´Ó¶ø¼õÉÙËøµÄÁ£¶È¡£ÕâÖÖÓÅ»¯¼¼ÊõÖ÷ÒªÊÊÓÃÓÚÐèÒª¶Ôͬһ¸ö¶ÔÏó½øÐжà´ÎÁ¬ÐøµÄËø²Ù×÷µÄÇé¿ö¡£ÀýÈçÔÚÉÏÃæµÄʾÀýÖУ¬ÓÉÓÚÿ´ÎÑ­»·¶¼ÐèÒª¶Ôͬһ¸ö¶ÔÏó½øÐÐËø²Ù×÷£¬Òò´Ë±àÒëÆ÷¿ÉÒÔ½«ÕâÐ©Ëø²Ù×÷ºÏ²¢³ÉÒ»¸ö¸ü´óµÄËø²Ù×÷£¬´Ó¶ø¼õÉÙËøµÄÁ£¶È¡£

¡¡¡¡ÐèҪעÒâµÄÊÇ£¬ËøÏû³ýºÍËø´Ö»¯¶¼ÊDZàÒëÆ÷»òÕßÔËÐÐʱ»·¾³×Ô¶¯½øÐеÄÓÅ»¯¼¼Êõ£¬²»ÐèÒªÊÖ¶¯½øÐдúÂëµÄÐ޸ġ£µ«ÊÇ£¬ÔÚÒ»Ð©ÌØÊâÇé¿öÏ£¬ÕâЩÓÅ»¯¼¼Êõ¿ÉÄܻᵼÖ³ÌÐòµÄÕýÈ·ÐÔÊܵ½Ó°Ï죬Òò´ËÔÚ½øÐÐÐÔÄÜÓÅ»¯Ê±ÐèÒª½÷É÷ʹÓá£

0 ·ÖÏíµ½£º
ºÍÎÒÃÇÔÚÏß½»Ì¸£¡
¡¾ÍøÕ¾µØÍ¼¡¿¡¾sitemap¡¿