JavaTM 2 Platform
Standard Ed. 5.0

ÆÐÅ°Áö java.util.concurrent.atomic

´ÜÀÏÀÇ º¯¼ö¿¡ ´ëÇÑ ¶ô ÇÁ¸®·Î thread ¼¼ÀÌÇÁÀÎ ÇÁ·Î±×·¡¹ÖÀ» Áö¿øÇϴ Ŭ·¡½ºÀÇ ¼Ò±Ô¸ðÀÇ Åø ŶÀÔ´Ï´Ù.

ÂüÁ¶Ã³:
          ¼³¸í

Ŭ·¡½º °³¿ä
AtomicBoolean ¿øÀÚÀûÀÎ °»½ÅÀÌ °¡´ÉÇÑ boolean Ä¡.
AtomicInteger ¿øÀÚÀûÀ¸·Î °»½Å °¡´ÉÇÑ int Ä¡ÀÔ´Ï´Ù.
AtomicIntegerArray ¿ä¼ÒÀÇ ¿øÀÚÀûÀÎ °»½ÅÀÌ °¡´ÉÇÑ int ¹è¿­ÀÔ´Ï´Ù.
AtomicIntegerFieldUpdater<T> ÁöÁ¤µÈ Ŭ·¡½ºÀÇ ÁöÁ¤µÈ volatile int ÇʵåÀÇ ¿øÀÚ °»½ÅÀÌ °¡´ÉÇÑ, ¸®Ç÷º¼Ç º£À̽ºÀÇ À¯Æ¿¸®Æ¼ÀÔ´Ï´Ù.
AtomicLong ¿øÀÚÀûÀÎ °»½ÅÀÌ °¡´ÉÇÑ long Ä¡ÀÔ´Ï´Ù.
AtomicLongArray ¿ä¼ÒÀÇ ¿øÀÚÀûÀÎ °»½ÅÀÌ °¡´ÉÇÑ long ¹è¿­ÀÔ´Ï´Ù.
AtomicLongFieldUpdater<T> ÁöÁ¤µÈ Ŭ·¡½ºÀÇ ÁöÁ¤µÈ volatile long ÇʵåÀÇ ¿øÀÚ °»½ÅÀÌ °¡´ÉÇÑ, ¸®Ç÷º¼Ç º£À̽ºÀÇ À¯Æ¿¸®Æ¼ÀÔ´Ï´Ù.
AtomicMarkableReference<V> AtomicMarkableReference´Â ¿øÀÚÀûÀ¸·Î °»½Å °¡´ÉÇÑ ¸¶Å© ºñÆ®¿Í ÇÔ²², °´Ã¼ ÂüÁ¶¸¦ °ü¸®ÇÕ´Ï´Ù.
AtomicReference<V> ¿øÀÚÀûÀÎ °»½ÅÀÌ °¡´ÉÇÑ °´Ã¼ ÂüÁ¶ÀÔ´Ï´Ù.
AtomicReferenceArray<E> ¿ä¼Ò¸¦ ¿øÀÚÀûÀ¸·Î °»½Å °¡´ÉÇÑ °´Ã¼ ÂüÁ¶ÀÇ ¹è¿­ÀÔ´Ï´Ù.
AtomicReferenceFieldUpdater<T, V> ÁöÁ¤µÈ Ŭ·¡½ºÀÇ ÁöÁ¤µÈ volatile ÂüÁ¶ ÇʵåÀÇ ¿øÀÚ °»½ÅÀÌ °¡´ÉÇÑ, ¸®Ç÷º¼Ç º£À̽ºÀÇ À¯Æ¿¸®Æ¼ÀÔ´Ï´Ù.
AtomicStampedReference<V> AtomicStampedReference´Â ¿øÀÚÀûÀ¸·Î °»½Å °¡´ÉÇÑ Á¤¼ö ¡¸½ºÅÆÇÁ¡¹°ú ÇÔ²², °´Ã¼ ÂüÁ¶¸¦ °ü¸®ÇÕ´Ï´Ù.
 

ÆÐÅ°Áö java.util.concurrent.atomic ¼³¸í

´ÜÀÏÀÇ º¯¼ö¿¡ ´ëÇÑ ¶ô ÇÁ¸®·Î thread ¼¼ÀÌÇÁÀÎ ÇÁ·Î±×·¡¹ÖÀ» Áö¿øÇϴ Ŭ·¡½ºÀÇ ¼Ò±Ô¸ðÀÇ Åø ŶÀÔ´Ï´Ù. ±âº»ÀûÀ¸·Î ÀÌ ÆÐÅ°Áö³»ÀÇ Å¬·¡½º´Â volatile Ä¡, ÇÊµå ¹× ¹è¿­ ¿ä¼ÒÀÇ °³³äÀ» ¿øÀÚÀûÀÎ Á¶°ÇºÎ °»½Å Á¶ÀÛµµ Á¦°øÇϴ Ŭ·¡½º¿¡±îÁö È®ÀåÇÕ´Ï´Ù. ¼­½ÄÀº ´ÙÀ½°ú °°½À´Ï´Ù.

boolean compareAndSet(expectedValue, updateValue);

ÀÌ ¸Þ¼­µå (Ŭ·¡½º°¡ ´Ù¸£¸é ÀμöÀÇ Çüŵµ ´Ù¸£´Ù)°¡ expectedValue¸¦ ÇöÀç º¸°ü À¯ÁöÇÏ°í ÀÖ´Â °æ¿ì, º¯¼ö¸¦ updateValue¿¡ ¿øÀÚÀûÀ¸·Î ¼³Á¤ÇØ, ¼º°øÇϸé true¸¦ ¸®ÅÏÇÕ´Ï´Ù. ÀÌ ÆÐÅ°Áö³»ÀÇ Å¬·¡½º¿¡´Â °ªÀ» ÃëµæÇϰųª ¹«Á¶°ÇÀ¸·Î ¼³Á¤ÇÏ´Â ¸Þ¼­µå ¹× ¾àÇÑ Á¶°ÇºÎ ¿øÀÚ °»½Å Á¶ÀÛ weakCompareAndSetµµ Æ÷ÇԵ˴ϴÙ. º¸Åë ÀÇ »ç¿ë¿¡¼­´Â ¾àÇÑ ¹öÀüÀÌ È¿°úÀûÀÎ °æ¿ì°¡ ÀÖ½À´Ï´Ù¸¸, ÁöÁ¤µÈ weakCompareAndSet ¸Þ¼­µå È£ÃâÀÌ ¿Ü°ü»ó¿¡¼­µµ (Áï, ¸íÈ®ÇÑ ÀÌÀ¯¾øÀÌ) ½ÇÆÐÇÏ´Â ÀÏÀÌ ÀÖ´Â Á¡ÀÌ ´Ù¸¨´Ï´Ù. false°¡ ÀǹÌÇÏ´Â °ÍÀº ÇÊ¿ä¿¡ µû¶ó¼­ Á¶ÀÛÀ» Àç½ÃÇàÇÒ ¼ö ÀÖ´Â °Í »ÓÀÔ´Ï´Ù. ÀÌ°ÍÀº º¯¼ö°¡ expectedValue¸¦ º¸°ü À¯ÁöÇØ, ÀÌ º¯¼öÀÇ ¼³Á¤À» ½ÃµµÇÏ´Â ´Ù¸¥ thread°¡ Á¸ÀçÇÏÁö ¾Ê´Â °æ¿ì¿¡ È£ÃâÀ» ¹Ýº¹ÇØ ½ÇÇàÇÏ´Â °ÍÀ¸·Î ÃÖÁ¾ÀûÀÎ ¼º°øÀÌ º¸ÁõµÇ´Â °Í¿¡ ±âÃʸ¦ µÎ°í ÀÖ½À´Ï´Ù.

ÀÌ·¯ÇÑ ¸Þ¼­µå »ç¾ç¿¡ ±Ù°ÅÇÏ´Â ±¸Çö¿¡ÀÇÇØ ÃÖ½ÅÀÇ ÇÁ·Î¼¼¼­·Î »ç¿ë °¡´ÉÇÑ °íÈ¿À²ÀÇ ¸Ó½Å ·¹º§ ¿øÀÚ ¸í·ÉÀ» »ç¿ëÇÏ´Â °ÍÀÌ °¡´ÉÇÏ°Ô µË´Ï´Ù. ´Ù¸¸, ÀϺÎÀÇ Ç÷§Æû¿¡¼­´Â ÀÌ°ÍÀ» Áö¿øÇÏ´Â °ÍÀ¸·Î ¾î¶°ÇÑ ³»ºÎ ¶ôÀÌ ¼ö¹ÝÇÒ °¡´É¼ºÀÌ ÀÖ½À´Ï´Ù. ÀÌ ¶§¹®¿¡ ¸Þ¼­µå·Î ºñºí·ÎÅ·ÀÌ ¾ö¹ÐÇÏ°Ô º¸ÁõµÇ´Â °ÍÀº ¾Æ´Õ´Ï´Ù. thread´Â Á¶ÀÛÀ» ½ÇÇàÇϱâ Àü¿¡ ÀϽÃÀûÀ¸·Î ºí·ÏÀ» ½ÇÇàÇÏ´Â ÀÏÀÌ ÀÖ½À´Ï´Ù.

AtomicBoolean, AtomicInteger, AtomicLong ¹× AtomicReference Ŭ·¡½ºÀÇ ÀνºÅϽº´Â °¢°¢ ´ëÀÀÇÏ´Â ÇüÅÂÀÇ ´ÜÀÏÀÇ º¯¼ö¿¡ ¾×¼¼½º ¹× °»½ÅÀ» Á¦°øÇÕ´Ï´Ù. °¢ Ŭ·¡½º´Â ±× ÇüÅ¿¡ ´ëÀÀÇÑ À¯Æ¿¸®Æ¼ ¸Þ¼­µåµµ Á¦°øÇÕ´Ï´Ù. ¿¹¸¦ µé¾î, AtomicLong ¹× AtomicInteger Ŭ·¡½º´Â ¿øÀÚ ÁõºÐ ¸Þ¼­µå¸¦ Á¦°øÇÕ´Ï´Ù. ¾î´À ¾îÇø®ÄÉÀ̼ÇÀÌ, ´ÙÀ½°ú °°ÀÌ ÀÏ·Ã ¹øÈ£¸¦ »ý¼ºÇÑ´Ù°í ÇÕ´Ï´Ù.

class Sequencer { private AtomicLong sequenceNumber = new AtomicLong(0);
 public long next() { return sequenceNumber.getAndIncrement();
 }}

º¸Åë, ¾×¼¼½º ¹× °»½ÅÀÇ memory effect´Â ´ÙÀ½ÀÇ Èֹ߼º ±ÔÄ¢¿¡ µû¸¨´Ï´Ù.

ÀÌ ÆÐÅ°Áö¿¡´Â ´ÜÀÏÀÇ °ªÀ» ³ªÅ¸³»´Â Ŭ·¡½º¿¡ ´õÇؼ±ÅÃÇÑ Å¬·¡½º³»ÀÇ ¼±ÅÃÇÑ volatile Çʵ忡 ´ëÇÑ compareAndSet Á¶ÀÛÀÇ Ãëµæ¿¡ »ç¿ë °¡´ÉÇÑ Updater Ŭ·¡½º°¡ Æ÷ÇԵ˴ϴÙ. AtomicReferenceFieldUpdater, AtomicIntegerFieldUpdater ¹× AtomicLongFieldUpdater ´Â °ü·ÃµÈ ÇʵåÇü¿¡ÀÇ ¾×¼¼½º¸¦ Á¦°øÇÏ´Â ¸®Ç÷º¼Ç º£À̽ºÀÇ À¯Æ¿¸®Æ¼ÀÔ´Ï´Ù. À̰͵éÀº ÁÖ·Î µ¿ÀÏ ³ëµåÀÇ º¹¼öÀÇ volatile Çʵå (Æ®¸® ³ëµåÀÇ ¸µÅ©µî)°¡ µ¶¸³ÇØ ¿øÀÚ °»½ÅÀÇ ´ë»óÀÌ µÇ´Â ¿øÀÚ µ¥ÀÌÅÍ ±¸Á¶·Î »ç¿ëµË´Ï´Ù. ÀÌ·¯ÇÑ Å¬·¡½º¸¦ »ç¿ëÇϸé, ¿øÀÚ °»½ÅÀÇ »ç¿ë ¹æ¹ý ¹× »ç¿ëÇϴ ŸÀֿ̹¡ °üÇÑ À¯¿¬¼ºÀÌ ³ô¾ÆÁý´Ï´Ù. ´Ù¸¸, ¸®Ç÷º¼Ç º£À̽ºÀÇ ¼³Á¤ÀÌ Ãë±ÞÇϱ⠾î·Á¿î, »ç¿ëÇϱ⠾î·Á¿î, º¸ÁõÀÌ ¾àÇØÁö´Â µîÀÇ Èñ»ýÀ» ÁöºÒÇÒ ÇÊ¿ä°¡ ÀÖ½À´Ï´Ù.

AtomicIntegerArray, AtomicLongArray ¹× AtomicReferenceArray Ŭ·¡½º´Â ÀÌ·¯ÇÑ ÇüÅÂÀÇ ¹è¿­¿¡ ´ëÇÑ ¿øÀÚ Á¶ÀÛ Áö¿ø¸¦ ¶ÇÇÑ È®ÀåÇÕ´Ï´Ù. ÀÌ·¯ÇÑ Å¬·¡½º´Â ÀϹÝÀÇ ¹è¿­¿¡¼­´Â Áö¿ø µÇÁö ¾Ê´Â ¹è¿­ ¿ä¼Ò¿¡ ´ëÇÑ volatile ¾×¼¼½º ½Ã¸àƽ½º¸¦ Á¦°øÇÏ´Â Á¡¿¡¼­µµ ÁÖ¸ñÇÒ ¸¸ÇÕ´Ï´Ù.

AtomicMarkableReference Ŭ·¡½º´Â ´ÜÀÏÀÇ ºÒ¸®¾ð °ªÀ» ÂüÁ¶¿Í °ü·ÃÁþ½À´Ï´Ù. ¿¹¸¦ µé¾î µ¥ÀÌÅÍ ±¸Á¶ÀÇ ³»ºÎ¿¡¼­ ÀÌ ºñÆ®¸¦ »ç¿ëÇØ, ÂüÁ¶ÁßÀÇ °´Ã¼°¡ ³í¸®ÀûÀ¸·Î »èÁ¦°¡ ³¡³­ »óÅÂÀÎ °ÍÀ» ³ªÅ¸³¾ ¼ö ÀÖ½À´Ï´Ù. AtomicStampedReference Ŭ·¡½º´Â Á¤¼ö°ªÀ» ÂüÁ¶¿¡ °ü·ÃÁþ½À´Ï´Ù. ÀÌ°ÍÀº ÀÏ·ÃÀÇ °»½Å¿¡ ´ëÀÀÇÏ´Â ¹öÀü ¹øÈ£¸¦ ³ªÅ¸³»´Â °æ¿ì µî¿¡ »ç¿ëÇÒ ¼ö ÀÖ½À´Ï´Ù.

¿øÀÚ Å¬·¡½º´Â ºñºí·Ï µ¥ÀÌÅÍ ±¸Á¶ ¹× °ü·ÃµÈ ±â¹Ý Ŭ·¡½º¸¦ ±¸ÇöÇϱâ À§ÇÑ ±âº» ´ÜÀ§·Î¼­ ÁÖ·Î ¼³°èµÇ°í ÀÖ½À´Ï´Ù. º¸Åë, compareAndSet ¸Þ¼­µå´Â ¶ôÀÇ ´ëü°¡ ¾Æ´Õ´Ï´Ù. ÀÌ°ÍÀº °´Ã¼ÀÇ À§±âÀÎ °»½ÅÀÌ ¡¸´ÜÀÏÀÇ¡¹º¯¼ö·Î ÇÑÁ¤µÇ´Â °æ¿ì¿¡¸¸ Àû¿ëµË´Ï´Ù.

¿øÀÚ Å¬·¡½º´Â java.lang.Integer ¹× °ü·Ã Ŭ·¡½º¿¡ ´ëÇÑ ¹ü¿ëÀÇ ´ëü Ŭ·¡½º°¡ ¾Æ´Õ´Ï´Ù. ÀÌ Å¬·¡½º´Â hashCode ³ª compareTo µîÀÇ ¸Þ¼­µå¸¦ Á¤ÀÇÇÏÁö ¾Ê½À´Ï´Ù (¿øÀÚ º¯¼ö¿¡¼­´Â º¯°æÀÌ »óÁ¤µÇ°í Àֱ⠶§¹®¿¡ Çؽà Å×À̺í Å°·Î¼­´Â ¹Ù¶÷Á÷ÇÑ ¼±ÅûçÇ×Àº ¾Æ´Ï±â ¶§¹®¿¡). ¶Ç, º¸Åë, Ŭ·¡½º´Â ¸ñÀûÀÇ ¾îÇø®ÄÉÀ̼ÇÀ¸·Î À¯¿ëÇÑ ÇüÅ¿¡ ´ëÇؼ­ Á¦°øµË´Ï´Ù. ¿¹¸¦ µé¾î, byte¸¦ ³ªÅ¸³»´Â ¿øÀÚ Å¬·¡½º´Â Á¸ÀçÇÏÁö ¾Ê½À´Ï´Ù. ÀÌ·¯ÇÑ »ç¿ë ºóµµÀÇ ÀûÀº ÄÉÀ̽º¿¡¼­´Â AtomicInteger¸¦ »ç¿ëÇØ byte Ä¡¸¦ º¸°ü À¯ÁöÇØ, ÇÊ¿ä¿¡ µû¶ó¼­ ij½ºÆ® ÇÒ ¼ö ÀÖ½À´Ï´Ù. ¶ÇÇÑ, Float.floatToIntBits ³ª Float.intBitstoFloat º¯È¯À» »ç¿ëÇØ float¸¦ º¸°ü À¯ÁöÇϰųªDouble.doubleToLongBits ³ª Double.longBitsToDouble º¯È¯À» »ç¿ëÇØ double¸¦ º¸°ü À¯ÁöÇÒ ¼ö ÀÖ½À´Ï´Ù.

µµÀÔµÈ ¹öÀü :
1.5

JavaTM 2 Platform
Standard Ed. 5.0

Copyright 2004 Sun Microsystems, Inc. All rights reserved. Use is subject to license terms . Documentation Redistribution Policy µµ ÂüÁ¶ÇϽʽÿÀ.