λ³Έλ¬Έ λ°”λ‘œκ°€κΈ°
πŸ–₯️/Java

[Java] 동기 처리(Synchronization) / 비동기 처리(Asynchronization)

by HanaV 2023. 3. 22.
728x90

동기화(Synchronization) : SWμͺ½μ—μ„œλŠ” ν”„λ‘œκ·Έλž¨μ΄ μˆœμ„œλŒ€λ‘œ μ°¨λ‘€μ°¨λ‘€ μ‹€ν–‰λ˜λŠ” 것

동기화λ₯Ό μ‚¬μš©ν•˜λ©΄ μž‘μ—…λ“€μ΄ μ„œλ‘œμ˜ μƒνƒœμ— 영ν–₯을 주지 μ•Šκ³  μˆœμ„œλŒ€λ‘œ 싀행될 수 μžˆλ‹€. 이λ₯Ό 톡해 μ—¬λŸ¬ μŠ€λ ˆλ“œκ°€ λ™μ‹œμ— μ ‘κ·Όν•˜λŠ” 것을 λ°©μ§€ν•˜κ³ , λ°μ΄ν„°μ˜ 일관성을 μœ μ§€ν•  수 μžˆλ‹€. λ™κΈ°ν™”λŠ” μž‘μ—…μ˜ μ™„λ£Œλ₯Ό κΈ°λ‹€λ¦¬λŠ” λ™μ•ˆ λ‹€λ₯Έ μž‘μ—…μ„ μ€‘λ‹¨μ‹œν‚€κ±°λ‚˜ λŒ€κΈ°μ‹œν‚€λŠ” κ²½μš°κ°€ λ§Žλ‹€.

비동기화(Asynchronization) : SWμͺ½μ—μ„œλŠ” 각각의 ν”„λ‘œκ·Έλž¨μ΄ μˆœμ„œμ— 상관없이 μ‹€ν–‰λ˜λŠ” 것

비동기화λ₯Ό μ‚¬μš©ν•˜λ©΄ μž‘μ—…λ“€μ΄ λ…λ¦½μ μœΌλ‘œ μ‹€ν–‰λ˜λ©°, ν•œ μž‘μ—…μ˜ μ™„λ£Œ μ—¬λΆ€λ₯Ό 기닀리지 μ•Šκ³  λ‹€μŒ μž‘μ—…μ„ μ‹€ν–‰ν•  수 μžˆλ‹€. 이λ₯Ό 톡해 μž‘μ—…λ“€μ˜ 병렬 μ²˜λ¦¬μ™€ λ™μ‹œμ„±μ„ 높일 수 μžˆλ‹€. λΉ„λ™κΈ°ν™”λŠ” μž‘μ—…μ˜ μ™„λ£Œ μ—¬λΆ€λ₯Ό ν™•μΈν•˜κΈ° μœ„ν•΄ 콜백(Callback)μ΄λ‚˜ ν”„λ‘œλ―ΈμŠ€(Promise)와 같은 방법을 μ‚¬μš©ν•˜λŠ”λ°, 이λ₯Ό 톡해 μž‘μ—…μ΄ μ™„λ£Œλ˜λ©΄ 미리 λ“±λ‘λœ 콜백 ν•¨μˆ˜κ°€ ν˜ΈμΆœλ˜κ±°λ‚˜ κ²°κ³Όλ₯Ό λ°˜ν™˜ν•  수 μžˆλ‹€.

 

μ•„λž˜ μ˜ˆμ‹œλŠ” 비동기 μ²˜λ¦¬μ™€ 동기 처리λ₯Ό 보여쀀닀.

//μ•ˆλ“œλ‘œμ΄λ“œ λ“±μ—μ„œ 많이 μ“°λŠ” 방법

public class ThreadExample03 {

    public static void main(String[] args) {
    
    
    
   
        new Thread(new Runnable() { //비동기 처리 λΆ€λΆ„

            @Override
            public void run() {
                
                for(int i=0; i<10; i++) 
                    try{
                        Thread.sleep(1000); //μ‹€ν–‰ μ‹œκ°„ 지연, 밀리s λ‹¨μœ„ 
                        System.out.println("Hello World");
                } catch(Exception e) {
                    e.printStackTrace();// 화면에 μ—λŸ¬ 좜λ ₯
                } //μ§€μ—°μ‹œκ°„ -> 1초
                
            }//run end

        }).start(); //thread end
        
        
        
        
        for (int i = 0; i<10; i++) { //동기 처리 λΆ€λΆ„
            try {
                Thread.sleep(1000);
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
            System.out.println("Hello Java");
        }
        for (int i = 0; i<10; i++) {
            try {
                Thread.sleep(1000);
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
            System.out.println("Hello everyone");
        }
    
    }//main end
}//class end

console

Hello Java
Hello World
Hello World
Hello Java
Hello World
Hello Java
Hello World
Hello Java
Hello World
Hello Java
Hello World
Hello Java
Hello World
Hello Java
Hello World
Hello Java
Hello World
Hello Java
Hello World
Hello Java
Hello everyone
Hello everyone
Hello everyone
Hello everyone
Hello everyone
Hello everyone
Hello everyone
Hello everyone
Hello everyone
Hello everyone

Hello WorldλŠ” λΉ„λ™κΈ°μ μœΌλ‘œ μ²˜λ¦¬λ˜μ—ˆλ‹€. μœ„μ—μ„œ λ³΄λ‹€μ‹œν”Ό Hello WorldλŠ” μˆœμ„œμ— 관계 없이 쀑간쀑간 처리된 것을 λ³Ό 수 μžˆλ‹€.

Hello Java와 Hello everyone은 λ™κΈ°μ μœΌλ‘œ μ²˜λ¦¬λ˜μ—ˆκΈ° λ•Œλ¬Έμ— Hello Javaκ°€ 10번 μ‹€ν–‰λœ 후에 Hello everyone이 10번 μ‹€ν–‰λ˜μ—ˆλ‹€.

728x90

"); wcs_do();