synchronized

  • ๋ฉ€ํ‹ฐ์Šค๋ ˆ๋“œ ํ™˜๊ฒฝ์—์„œ, 2~3๊ฐœ์˜ ์Šค๋ ˆ๋“œ์—์„œ mutable shared data๋ฅผ ๋™์‹œ์— ์—…๋ฐ์ดํŠธ ํ•  ๋•Œ race conditionarrow-up-right ๋ฐœ์ƒ.

    • ์ด ๋•Œ ์ž๋ฐ”๊ฐ€ ์ œ๊ณตํ•˜๊ณ  ์žˆ๋Š”, [[race-condition]] ์„ ํ”ผํ•˜๊ธฐ ์œ„ํ•œ ๋ฉ”์นด๋‹ˆ์ฆ˜์ž„.

    • shard data์— ์ ‘๊ทผํ•˜๋Š” ์Šค๋ ˆ๋“ค์„ sychronizing ํ•จ์œผ๋กœ..

public class BaeldungSynchronizedMethods {

    private int sum = 0;

    public void calculate() {
        setSum(getSum() + 1);
    }

    // standard setters and getters
}

@Test
public void givenMultiThread_whenNonSyncMethod() {
    ExecutorService service = Executors.newFixedThreadPool(3);
    BaeldungSynchronizedMethods summation = new BaeldungSynchronizedMethods();

    IntStream.range(0, 1000)
      .forEach(count -> service.submit(summation::calculate));
    service.awaitTermination(1000, TimeUnit.MILLISECONDS);

    assertEquals(1000, summation.getSum());
}
  • int sum์€ ๊ณต์œ ์ž์›, ์ ‘๊ทผํ•˜๋Š” ๋ฐฉ์‹์€ cacluate() ๋ฅผ ํ†ตํ•ด์„œ (์—ฌ๋Ÿฌ ์Šค๋ ˆ๋“œ๊ฐ€..)

  • ์ฆ‰ 3๊ฐœ์˜ ์Šค๋ ˆ๋“œ์—์„œ ๋™์‹œ์— ์ ‘๊ทผํ•ด์„œ calculate() ์‹คํ–‰

  • ๊ฒฐ๊ณผ๊ฐ€ 1000์ด ๋‚˜์˜ฌ ๊ฒƒ์ด ๊ธฐ๋Œ€๋˜์ง€๋งŒ, ํ…Œ์ŠคํŠธ ์‹คํŒจํ•จ.

keyword

  • [[synchronized]] ํ‚ค์›Œ๋“œ๋Š” 3๊ฐ€์ง€ ๋ถ€๋ถ„์— ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Œ.

    • instance method

    • static method

    • code blocks

  • code block์— ์‚ฌ์šฉํ•  ๋•Œ๋Š”, monitorarrow-up-right ์„ ์‚ฌ์šฉํ•ด์„œ ๋ฝ์„ ์ œ๊ณต.

instance method

  • ์ผ๋ฐ˜์ ์ธ ๋ฉ”์„œ๋“œ์— ํ‚ค์›Œ๋“œ ์ถ”๊ฐ€ํ•˜๋Š” ๊ฒƒ.

  • ์ƒ์„ฑ๋œ instance ํ•ด๋‹น ๋ฉ”์„œ๋“œ์— ์ ‘๊ทผํ•˜๋Š” ๊ฑด ํ•œ๋ฒˆ์— ํ•˜๋‚˜์˜ ์Šค๋ ˆ๋“œ์—์„œ๋งŒ ๊ฐ€๋Šฅํ•˜๊ฒŒํ•จ.

  • ์—ฌ๋Ÿฌ instance๊ฐ€ ์ƒ์„ฑ๋˜์–ด ์žˆ์œผ๋ฉด, ๊ฐ๊ฐ ์ธ์Šคํ„ด์Šค๋งˆ๋‹ค ๊ฐ๊ฐ ์Šค๋ ˆ๋“œ๊ฐ€ ํ•ด๋‹น ๋ฉ”์„œ๋“œ์— ์ ‘๊ทผ ๊ฐ€๋Šฅํ•˜๊ฒŒ ๋จ.

static method

  • static ํ‚ค์›Œ๋“œ์™€ ํ•จ๊ป˜ ์‚ฌ์šฉ.

  • Class ๋ ˆ๋ฒจ์— ์ข…์†๋˜์–ด์žˆ์Œ.

    • ์ฆ‰ ์˜ค์ง ํ•˜๋‚˜์˜ Class object๊ฐ€ [[JVM]] ์— ์กด์žฌํ•  ์ˆ˜ ์žˆ๋Š” ๋งŒํผ, ์ด ํด๋ž˜์Šค๋กœ ์ƒ์„ฑ๋œ ์ธ์Šคํ„ด์Šค๊ฐ€ ์—ฌ๋Ÿฌ๊ฐœ ์žˆ๋”๋ผ๋„, ํ•ด๋‹น ๋ฉ”์„œ๋“œ์— ์ ‘๊ทผํ•˜๋Š” ๊ฑด ํ•˜๋‚˜์˜ ์Šค๋ ˆ๋“œ๋งŒ ๊ฐ€๋Šฅํ•จ.

  • ์ •๋ฆฌํ•ด๋ณด์ž๋ฉด instance method ๋ ˆ๋ฒจ์— ํ‚ค์›Œ๋“œ๊ฐ€ ๋ถ™์–ด์žˆ์œผ๋ฉด, ํ•ด๋‹น ์ธ์Šคํ„ด์Šค ์—์„œ๋งŒ ํ•˜๋‚˜์˜ ์Šค๋ ˆ๋“œ๊ฐ€ ์ ‘๊ทผ๊ฐ€๋Šฅํ•˜๋„๋ก ๋ณด์žฅํ•˜๋Š”๋ฐ,

  • static ์™€ ๊ฐ™์ด ์‚ฌ์šฉํ•œ๋‹ค๋ฉด, ํ•ด๋‹น ํด๋ž˜์Šค์— ํ•ด๋‹น ๋ฉ”์„œ๋“œ์— ํ•˜๋‚˜์˜ ์Šค๋ ˆ๋“œ๊ฐ€ ์ ‘๊ทผํ•˜๋„๋ก ๋ณด์žฅํ•˜๋Š” ๊ฒƒ.

์ฐธ๊ณ 

Last updated