본문 바로가기

Language/Java

자바 synchronized

반응형

자바로 개발한 기존 프로젝트를 코틀린으로 변환하는중에 Thread와 블락(synchronized)과 관련된 문제 때문에 애를 좀 먹었다. synchronized, wait, notify은 대충은 알지만 확실한 개념을 잘 몰라서 이번 기회에 정리를 해보려고 한다.

 

1. synchronized

 

- 정의 : 위키백과에서는 "컴퓨터 과학에서 동기화 란 두 가지 뚜렷하지만 관련 개념 인 프로세스 동기화 및 데이터 동기화 중 하나를 의미합니다. 프로세스 동기화는 여러 프로세스가 특정 시점에서 가입하거나 핸드 셰이크하여 계약에 도달하거나 특정 작업 순서를 확약한다는 아이디어를 나타냅니다"라고 한다.

 

영어를 직역한거라 말이 어렵다.

간단하게 예시를 들자면 하나의 사과를 여러 명이 동시에 먹으려고 한다면 당연히 싸움이 날 것이다.

여기서 사과는 컴퓨터에서 자원, 즉 메모리라 얘기할 수 있고 사람들은 쓰레드라고 할 수 있다. 여러 쓰레드가 한 변수에 동시에 진입해서 값을 변경한다면 개발자가 의도한대로 작동하지 않을 것이다. 이러한 문제점들을 해결하고자 고안된 방법이 synchronized이다. 고유 락을 이용하여 여러 스레드의 접근을 제어하여 동시성 문제를 해결하는 것이다.

 

일반 코드

public class Test
{	
	
    private int nTest = 0;
   
    private void doIncrease()
    {
    	nTest++; //여러 쓰레드가 동시에 접근할 수 있기 때문에 안전하지 않은 연산이다.
    }
}

 

synchronized로 블락 사용

public class Test
{	

	private int nTest = 0;
    
    private void doIncrease() 
    {
    	synchronized(this) 
        {
        	nTest++;
        }
    }
}

이렇게 블락을 사용하면 하나의 쓰레드가 사용하고 있을 때 다른 쓰레드가 사용하지 못하도록 할 수 있다.

 

 

 

반응형

'Language > Java' 카테고리의 다른 글

Java로 자료구조(LinkedList, Stack, Queue) 구현해보기  (0) 2021.04.26
자바 == 연산자  (0) 2021.04.12
제네릭(Generic)  (0) 2021.04.02
Interface Comparable  (0) 2020.11.29
Java Cipher  (0) 2019.10.24