<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    ゞ沉默是金ゞ

    魚離不開水,但是沒有說不離開哪滴水.
    posts - 98,comments - 104,trackbacks - 0
    In this article we will look into Atomic Variables which can help us to write lock free and wait free algorithms which were not possible prior to Java 5.0.

    Two main points about Atomic Variables are 

       1. Help to write lock free and wait free algorithm

    Under high contention ( lots of thread are fighting for lock ), JVM spends more time with scheduling of threads, managing contention, queues of waiting threads and less time in doing the real work.
    This dramatically reduces the throughput of the process.
    Problem with locking:
      1) Thread in block state cannot do anything else.
        2) If the blocked thread is high priority, then its a big disaster.
        3) Can cause Dead lock
        4) Managing a Block thread is a heavy weight process, so throughput decreases.

    Soon we will see how can we write lock free algorithms using atomic variables


    2. Implement very light weight process like CAS –


    CAS (compares and swap):
           
    Let’s take an example to understand the concept of CAS. Suppose we have once variable “i” and we are doing some calculation over “I” and storing the result back into “i”. In a nutshell-
            i = someComplicateComputation( i )
    for “i” = 1,
            someComplicatedComputation(i) è 1234

    In CAS Process following happens-
            A memory location V will be defined.
            A local variable A will be defined.
            A local variable B will be defined.

    V will hold the initial value of “i”. So
            V = i =1
    A = V = 1
    B = result of that computation = 1234
    compare ( V , A )
    if
    both values are same --> replace V with B's value.
    else
            this means in the mean while someone has changed the value of V, so repeat the whole process again. Lets someone changes the value of “i”, hence V to 2.
           
                 V = 2;
                 A = V = 2
                 B = result = 3246;
                  compare ( V , A )
                            and so on...!!
           
    This is very light weight process. This CAS technique is implemented by atomic package classes.



    Example – Lets write a simple program which first increase the number by 1, then decrease the number by 1, and then increase again by 1. So overall effect is increase the number by 1. Lets run 4 threads concurrently access the method and compare the performance of AtomicInteger Vs Integer.

    package com.jovialjava.blog.threads;

    import java.util.concurrent.atomic.*;

    public class AtomicVariableExample implements Runnable {
        AtomicInteger atomic_int_1 
    = new AtomicInteger();
        AtomicInteger atomic_int_2 
    = new AtomicInteger();
        
    int int_1;
        
    int int_2;
        
    private static int count = 0;

        
    public static void main(String[] args) {
            AtomicVariableExample pr 
    = new AtomicVariableExample();
            
    new Thread(pr).start();// 1 0 1
            new Thread(pr).start();// 2 1 2
            new Thread(pr).start(); // 3 2 3
            new Thread(pr).start(); // 4 3 4
            while (true) {
                
    if (count == 4) {
                    System.out.println(pr.atomic_int_1.get());
                    System.out.println(pr.int_1);
                    
    break;
                }
            }

        }

        
    public void run() {
            System.out.println(
    "Inside run method");
            doCalc();

        }

        
    private void doCalc() {
            
    try {
                atomic_int_2 
    = atomic_int_1;
                int_2 
    = int_1;
                atomic_int_2.incrementAndGet();
                int_2 
    = int_2 + 1;
                Thread.sleep(
    1000);
                atomic_int_2.decrementAndGet();
                int_2 
    = int_2 - 1;
                Thread.sleep(
    1000);
                atomic_int_2.incrementAndGet();
                int_2 
    = int_2 + 1;
                Thread.sleep(
    1000);
                atomic_int_1 
    = atomic_int_2;
                int_1 
    = int_2;
                
    synchronized (this) {
                    count
    ++;
                }
            } 
    catch (InterruptedException e) {
                e.printStackTrace();
            }
        }

    }
    posted on 2012-08-06 10:50 ゞ沉默是金ゞ 閱讀(952) 評論(0)  編輯  收藏 所屬分類: Java SE
    主站蜘蛛池模板: 久久久亚洲精品国产| 相泽亚洲一区中文字幕| 亚洲av一本岛在线播放| 91大神免费观看| 久久亚洲美女精品国产精品| 久久成人a毛片免费观看网站| 亚洲成av人在线视| 1000部无遮挡拍拍拍免费视频观看| 亚洲国产高清人在线| 久久精品人成免费| 亚洲成av人片在线看片| 国内免费高清在线观看| 亚洲欧美日韩国产精品一区| 日韩免费在线观看| 国产亚洲精品美女久久久久| 亚洲国产成人VA在线观看| 国产日韩AV免费无码一区二区三区| 亚洲精品国偷自产在线| 日本免费一区二区三区四区五六区| 91亚洲va在线天线va天堂va国产 | xx视频在线永久免费观看| 亚洲国产品综合人成综合网站| 国产成人A在线观看视频免费| 相泽南亚洲一区二区在线播放| 亚洲欧洲久久av| 久久久精品2019免费观看| 亚洲午夜无码久久久久软件| 亚洲第一区精品日韩在线播放| a级毛片在线免费| 亚洲国产av美女网站| 国产免费拔擦拔擦8x| 免费精品一区二区三区第35| 亚洲一级毛片免费观看| 日韩精品电影一区亚洲| 8x成人永久免费视频| 亚洲AV成人无码网站| 亚洲av永久无码精品古装片| 在线v片免费观看视频| WWW免费视频在线观看播放| 亚洲理论片在线中文字幕| 亚洲国产日韩在线观频|