JavaRush /ื‘ืœื•ื’ Java /Random-HE /ืกื ื›ืจื•ืŸ ื—ื•ื˜ื™ื, ื ืขื™ืœืช ืื•ื‘ื™ื™ืงื˜ื™ื ื•ื ืขื™ืœืช ืžื—ืœืงื”
CynepHy6
ืจึธืžึธื”
ะ’ะตะปะธะบะธะน ะะพะฒะณะพั€ะพะด

ืกื ื›ืจื•ืŸ ื—ื•ื˜ื™ื, ื ืขื™ืœืช ืื•ื‘ื™ื™ืงื˜ื™ื ื•ื ืขื™ืœืช ืžื—ืœืงื”

ืคื•ืจืกื ื‘ืงื‘ื•ืฆื”
ืกื ื›ืจื•ืŸ ื—ื•ื˜ื™ื, ื ืขื™ืœืช ืื•ื‘ื™ื™ืงื˜ื™ื ื•ื ืขื™ืœืช ืžื—ืœืงื” - 1ืกื ื›ืจื•ืŸ ืžืชื™ื™ื—ืก ืœืจื™ื‘ื•ื™ ื”ืฉื—ืœื•ืช. ื‘ืœื•ืง ืงื•ื“ ืžืกื•ื ื›ืจืŸ ื™ื›ื•ืœ ืœื”ืชื‘ืฆืข ืจืง ืขืœ ื™ื“ื™ ืฉืจืฉื•ืจ ืื—ื“ ื‘ื›ืœ ืคืขื. Java ืชื•ืžืš ื‘ืžืกืคืจ ืฉืจืฉื•ืจื™ื ืœื‘ื™ืฆื•ืข. ื–ื” ืขืœื•ืœ ืœื’ืจื•ื ืœืฉื ื™ ืฉืจืฉื•ืจื™ื ืื• ื™ื•ืชืจ ืœื’ืฉืช ืœืื•ืชื• ืฉื“ื” ืื• ืื•ื‘ื™ื™ืงื˜. ืกื ื›ืจื•ืŸ ื”ื•ื ืชื”ืœื™ืš ื”ืžืืคืฉืจ ืœื›ืœ ื”ืฉืจืฉื•ืจื™ื ื”ืžืงื‘ื™ืœื™ื ื‘ืชื•ื›ื ื™ืช ืœืคืขื•ืœ ื‘ืื•ืคืŸ ืกื™ื ื›ืจื•ื ื™. ืกื ื›ืจื•ืŸ ืžื•ื ืข ืฉื’ื™ืื•ืช ืขืงื‘ื™ื•ืช ื‘ื–ื™ื›ืจื•ืŸ ื”ื ื’ืจืžื•ืช ืžื’ื™ืฉื” ืœื ืขืงื‘ื™ืช ืœื–ื™ื›ืจื•ืŸ ืžืฉื•ืชืฃ. ื›ืืฉืจ ืžืชื•ื“ื” ืžื•ื›ืจื–ืช ื›ืžืกื•ื ื›ืจื ืช, ื”ืฉืจืฉื•ืจ ืžื—ื–ื™ืง ืฆื’ ืขื‘ื•ืจ ื”ืื•ื‘ื™ื™ืงื˜ ืฉื”ืฉื™ื˜ื” ืฉืœื• ืžื‘ื•ืฆืขืช. ืื ืฉืจืฉื•ืจ ืื—ืจ ืžื‘ืฆืข ืฉื™ื˜ื” ืžืกื•ื ื›ืจื ืช, ื”ืฉืจืฉื•ืจ ืฉืœืš ื™ื—ืกื•ื ืขื“ ืฉื”ืฉืจืฉื•ืจ ื”ืฉื ื™ ื™ืฉื—ืจืจ ืืช ื”ืฆื’. ืกื ื›ืจื•ืŸ ืžื•ืฉื’ ื‘-Java ื‘ืืžืฆืขื•ืช ืžื™ืœื” ืฉืžื•ืจื” synchronized. ืืชื” ื™ื›ื•ืœ ืœื”ืฉืชืžืฉ ื‘ื• ื‘ืฉื™ืขื•ืจื™ื ืฉืœืš ืขืœ ื™ื“ื™ ื”ื’ื“ืจืช ืฉื™ื˜ื•ืช ืื• ื‘ืœื•ืงื™ื ืžืกื•ื ื›ืจื ื™ื. ืœื ืชื•ื›ืœ ืœื”ืฉืชืžืฉ synchronizedื‘ืžืฉืชื ื™ื ืื• ื‘ืชื›ื•ื ื•ืช ื‘ื”ื’ื“ืจืช ืžื—ืœืงื”.

ื ืขื™ืœื” ื‘ืจืžืช ืื•ื‘ื™ื™ืงื˜

ื–ื”ื• ืžื ื’ื ื•ืŸ ืœืกื ื›ืจื•ืŸ ืฉืœ ืฉื™ื˜ื” ืœื ืกื˜ื˜ื™ืช ืื• ื‘ืœื•ืง ืงื•ื“ ืœื ืกื˜ื˜ื™ ื›ืš ืฉืจืง ืฉืจืฉื•ืจ ืื—ื“ ื™ื›ื•ืœ ืœื”ืคืขื™ืœ ื‘ืœื•ืง ืื• ืžืชื•ื“ื” ื ืชื•ื ื” ื‘ืžื•ืคืข ื ืชื•ืŸ ืฉืœ ืžื—ืœืงื”. ื–ื” ืฆืจื™ืš ืœื”ื™ืขืฉื•ืช ื‘ื›ืœ ืคืขื ืฉืืชื” ืฆืจื™ืš ืœื”ืคื•ืš ืืช ืฉืจืฉื•ืจ ื”ื ืชื•ื ื™ื ื‘ืจืžืช ื”ืžื•ืคืข ื‘ื˜ื•ื—. ื“ื•ื’ืžื:
public class DemoClass{
    public synchronized void demoMethod(){}
}
ืื•ึน
public class DemoClass{
    public void demoMethod(){
        synchronized (this)        {
            //other thread safe code
        }
    }
}
ืื•ึน
public class DemoClass{
    private final Object lock = new Object();
    public void demoMethod(){
        synchronized (lock)        {
            //other thread safe code
        }
    }
}

ื ืขื™ืœื” ื‘ืจืžืช ื”ื›ื™ืชื”

ืžื•ื ืข ืžืฉืจืฉื•ืจื™ื ืžืจื•ื‘ื™ื ืœื”ื™ื›ื ืก ืœื‘ืœื•ืง ืžืกื•ื ื›ืจืŸ ื‘ืžื”ืœืš ื”ื‘ื™ืฆื•ืข ื‘ื›ืœ ืื—ื“ ืžื”ืžื•ืคืขื™ื ื”ื–ืžื™ื ื™ื ืฉืœ ื”ืžื—ืœืงื”. ื”ืžืฉืžืขื•ืช ื”ื™ื ืฉืื ื™ืฉ 100 ืžื•ืคืขื™ื ืฉืœ ื”ืžื—ืœืงื” ื‘ืžื”ืœืš ื”ืคืขืœืช ื”ืชื•ื›ื ื™ืช DemoClass, ืื– ืจืง ืฉืจืฉื•ืจ ืื—ื“ ื‘ืื•ืชื• ื–ืžืŸ ื™ื•ื›ืœ ืœื”ืคืขื™ืœ demoMethod()ื‘ื›ืœ ืื—ื“ ืžื”ืžืงืจื™ื, ื•ื›ืœ ืฉืืจ ื”ืžืงืจื™ื ื™ื™ื—ืกืžื• ืœืฉืจืฉื•ืจื™ื ืื—ืจื™ื. ื–ื” ื”ื›ืจื—ื™ ื›ืืฉืจ ืืชื” ืฆืจื™ืš ืœื”ืคื•ืš ืฉืจืฉื•ืจ ื ืชื•ื ื™ื ืกื˜ื˜ื™ ื‘ื˜ื•ื—.
public class DemoClass{
    public synchronized static void demoMethod(){}
}
ืื•ึน
public class DemoClass{
    public void demoMethod(){
        synchronized (DemoClass.class)        {
            //other thread safe code
        }
    }
}
ืื•ึน
public class DemoClass
{
    private final static Object lock = new Object();
    public void demoMethod(){
        synchronized (lock)        {
            //other thread safe code
        }
    }
}

ื›ืžื” ื”ืขืจื•ืช ื—ืฉื•ื‘ื•ืช

  1. ืกื ื›ืจื•ืŸ ื‘-Java ืžื‘ื˜ื™ื— ืฉืื™ืŸ ืฉื ื™ ืฉืจืฉื•ืจื™ื ื™ื›ื•ืœื™ื ืœื‘ืฆืข ืฉื™ื˜ื” ืžืกื•ื ื›ืจื ืช ื‘ื•-ื–ืžื ื™ืช ืื• ื‘ืžืงื‘ื™ืœ.

  2. synchronizedื ื™ืชืŸ ืœื”ืฉืชืžืฉ ืจืง ื‘ืฉื™ื˜ื•ืช ื•ื‘ืœื•ืงื™ ืงื•ื“. ืฉื™ื˜ื•ืช ืื• ื‘ืœื•ืงื™ื ืืœื” ื™ื›ื•ืœื™ื ืœื”ื™ื•ืช ืกื˜ื˜ื™ื™ื ืื• ืœื ืกื˜ื˜ื™ื™ื.

  3. ื‘ื›ืœ ืคืขื ืฉืจืฉื•ืจ ื›ืœืฉื”ื• ื ื›ื ืก ืœืฉื™ื˜ื” ืžืกื•ื ื›ืจื ืช ืื• ื—ืกื™ืžื” ื”ื•ื ืจื•ื›ืฉ ื ืขื™ืœื” ื•ื‘ื›ืœ ืคืขื ืฉืจืฉื•ืจ ื™ื•ืฆื ืžืฉื™ื˜ื” ืžืกื•ื ื›ืจื ืช ืื• ื—ืกื™ืžื” ื”-JVM ืžืฉื—ืจืจ ืืช ื”ื ืขื™ืœื”. ื”ื ืขื™ืœื” ืžืฉืชื—ืจืจืช ื’ื ืื ื”ืฉืจืฉื•ืจ ืขื•ื–ื‘ ืืช ื”ืฉื™ื˜ื” ื”ืžืกื•ื ื›ืจื ืช ืœืื—ืจ ื”ืฉืœืžืชื• ืขืงื‘ ืฉื’ื™ืื•ืช ืื• ื—ืจื™ื’ื™ื ื›ืœืฉื”ื.

  4. synchronizedื‘-Java , ื–ื” ืื•ืžืจ ืฉืื ืฉื™ื˜ื” ืžืกื•ื ื›ืจื ืช ืงื•ืจืืช ืœืฉื™ื˜ื” ืžืกื•ื ื›ืจื ืช ืื—ืจืช ืฉื“ื•ืจืฉืช ืืช ืื•ืชื• ื ืขื™ืœื”, ื”ืฉืจืฉื•ืจ ื”ื ื•ื›ื—ื™ ืฉืžื—ื–ื™ืง ืืช ื”ื ืขื™ืœื” ื™ื›ื•ืœ ืœื”ื™ื›ื ืก ืœืฉื™ื˜ื” ื–ื• ืžื‘ืœื™ ืœืจื›ื•ืฉ ืืช ื”ื ืขื™ืœื”.

  5. ะกะธะฝั…ั€ะพะฝะธะทะฐั†ะธั ะฒ Java ะฑัƒะดะตั‚ ะฑั€ะพัะฐั‚ัŒ NullPointerException ะตัะปะธ an object ะธัะฟะพะปัŒะทัƒะตะผั‹ะน ะฒ ัะธะฝั…ั€ะพะฝะธะทะธั€ะพะฒะฐะฝะฝะพะผ ะฑะปะพะบะต null. ะะฐะฟั€ะธะผะตั€, ะฒ ะฒั‹ัˆะตะฟั€ะธะฒะตะดะตะฝะฝะพะผ ะฟั€ะธะผะตั€ะต codeะฐ, ะตัะปะธ ะทะฐะผะพะบ ะธะฝะธั†ะธะฐะปะธะทะธั€ัƒะตั‚ัั How null, ัะธะฝั…ั€ะพะฝะธะทะธั€ะพะฒะฐะฝะฝั‹ะน (lock) ะฑั€ะพัะธั‚ NullPointerException.

  6. ะกะธะฝั…ั€ะพะฝะธะทะธั€ะพะฒะฐะฝะฝั‹ะต ะผะตั‚ะพะดั‹ ะฒ Java ะฒะฝะพััั‚ ะดะพะฟะพะปะฝะธั‚ะตะปัŒะฝั‹ะต ะทะฐั‚ั€ะฐั‚ั‹ ะฝะฐ ะฟั€ะพะธะทะฒะพะดะธั‚ะตะปัŒะฝะพัั‚ัŒ ะฒะฐัˆะตะณะพ applications. ะขะฐะบ ั‡ั‚ะพ ะธัะฟะพะปัŒะทัƒะนั‚ะต ัะธะฝั…ั€ะพะฝะธะทะฐั†ะธัŽ, ะบะพะณะดะฐ ะพะฝะฐ ะฐะฑัะพะปัŽั‚ะฝะพ ะฝะตะพะฑั…ะพะดะธะผะฐ. ะšั€ะพะผะต ั‚ะพะณะพ, ั€ะฐััะผะพั‚ั€ะธั‚ะต ะฒะพะฟั€ะพั ะพะฑ ะธัะฟะพะปัŒะทะพะฒะฐะฝะธะธ ัะธะฝั…ั€ะพะฝะธะทะธั€ะพะฒะฐะฝะฝั‹ั… ะฑะปะพะบะพะฒ codeะฐ ะดะปั ัะธะฝั…ั€ะพะฝะธะทะฐั†ะธะธ ั‚ะพะปัŒะบะพ ะบั€ะธั‚ะธั‡ะตัะบะธั… ัะตะบั†ะธะน codeะฐ.

  7. ะ’ะฟะพะปะฝะต ะฒะพะทะผะพะถะฝะพ, ั‡ั‚ะพ ะธ ัั‚ะฐั‚ะธั‡ะตัะบะธะน ะธ ะฝะต ัั‚ะฐั‚ะธั‡ะตัะบะธะน ัะธะฝั…ั€ะพะฝะธะทะธั€ะพะฒะฐะฝะฝั‹ะต ะผะตั‚ะพะดั‹ ะผะพะณัƒั‚ ั€ะฐะฑะพั‚ะฐั‚ัŒ ะพะดะฝะพะฒั€ะตะผะตะฝะฝะพ or ะฟะฐั€ะฐะปะปะตะปัŒะฝะพ, ะฟะพั‚ะพะผัƒ ั‡ั‚ะพ ะพะฝะธ ะทะฐั…ะฒะฐั‚ั‹ะฒะฐัŽั‚ ะทะฐะผะพะบ ะฝะฐ ะดั€ัƒะณะพะน an object.

  8. ะ’ ัะพะพั‚ะฒะตั‚ัั‚ะฒะธะธ ัะพ ัะฟะตั†ะธั„ะธะบะฐั†ะธะตะน ัะทั‹ะบะฐ ะฒั‹ ะฝะต ะผะพะถะตั‚ะต ะธัะฟะพะปัŒะทะพะฒะฐั‚ัŒ synchronized ะฒ ะบะพะฝัั‚ั€ัƒะบั‚ะพั€ะต ัั‚ะพ ะฟั€ะธะฒะตะดะตั‚ ะบ ะพัˆะธะฑะบะต ะบะพะผะฟะธะปัั†ะธะธ.

  9. ะะต ัะธะฝั…ั€ะพะฝะธะทะธั€ัƒะนั‚ะต ะฟะพ ะฝะต ั„ะธะฝะฐะปัŒะฝะพะผัƒ (no final) ะฟะพะปัŽ, ะฟะพั‚ะพะผัƒ ั‡ั‚ะพ link, ะฝะฐ ะฝะต ั„ะธะฝะฐะปัŒะฝะพะต ะฟะพะปะต ะผะพะถะตั‚ ะธะทะผะตะฝะธั‚ัŒัั ะฒ ะปัŽะฑะพะต ะฒั€ะตะผั, ะฐ ะทะฐั‚ะตะผ ะดั€ัƒะณะพะน ะฟะพั‚ะพะบ ะผะพะถะตั‚ ะฟะพะปัƒั‡ะธั‚ัŒ ัะธะฝั…ั€ะพะฝะธะทะฐั†ะธัŽ ะฝะฐ ั€ะฐะทะฝั‹ั… an objectั… ะธ ัƒะถะต ะฝะต ะฑัƒะดะตั‚ ะฝะธHowะพะน ัะธะฝั…ั€ะพะฝะธะทะฐั†ะธะธ ะฒะพะพะฑั‰ะต. ะ›ัƒั‡ัˆะต ะฒัะตะณะพ ะธัะฟะพะปัŒะทะพะฒะฐั‚ัŒ ะบะปะฐัั String, ะบะพั‚ะพั€ั‹ะน ัƒะถะต ะฝะตะธะทะผะตะฝัะตะผั‹ะน ะธ ั„ะธะฝะฐะปัŒะฝั‹ะน.

ะฃะดะฐั‡ะธ ะฒ ะพะฑัƒั‡ะตะฝะธะธ!! ะžั€ะธะณะธะฝะฐะป: Object level lock vs Class level lock in Java
ื”ืขืจื•ืช
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION