|
JavaTM 2 Platform Standard Ed. 5.0 |
|||||||||
ÀüÀÇ ÆÐŰÁö ´ÙÀ½ÀÇ ÆÐŰÁö | ÇÁ·¹ÀÓÀ¸·Î ÇÁ·¹ÀÓ ¾øÀÌ |
ÂüÁ¶Ã³:
¼³¸í
Ŭ·¡½º °³¿ä | |
---|---|
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´Â ¿øÀÚÀûÀ¸·Î °»½Å °¡´ÉÇÑ Á¤¼ö ¡¸½ºÅÆÇÁ¡¹°ú ÇÔ²², °´Ã¼ ÂüÁ¶¸¦ °ü¸®ÇÕ´Ï´Ù. |
´ÜÀÏÀÇ º¯¼ö¿¡ ´ëÇÑ ¶ô ÇÁ¸®·Î 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¸¦ º¸°ü À¯ÁöÇÒ ¼ö ÀÖ½À´Ï´Ù.
|
JavaTM 2 Platform Standard Ed. 5.0 |
|||||||||
ÀüÀÇ ÆÐŰÁö ´ÙÀ½ÀÇ ÆÐŰÁö | ÇÁ·¹ÀÓÀ¸·Î ÇÁ·¹ÀÓ ¾øÀÌ |
Copyright 2004 Sun Microsystems, Inc. All rights reserved. Use is subject to license terms . Documentation Redistribution Policy µµ ÂüÁ¶ÇϽʽÿÀ.