<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
    主站蜘蛛池模板: 亚洲国产精品自在在线观看| 亚洲男人天堂2020| 亚洲黄网在线观看| 欧洲人成在线免费| 亚洲国产精品一区第二页| 97超高清在线观看免费视频| 久久精品亚洲福利| 成人免费777777被爆出| 亚洲开心婷婷中文字幕| 国产免费爽爽视频在线观看 | 成人人免费夜夜视频观看| 亚洲男人天堂2018av| 成全视频免费高清| 亚洲av乱码中文一区二区三区| 国产一区二区三区免费在线观看 | 亚洲人成片在线观看| 免费精品国偷自产在线在线| 亚洲资源最新版在线观看| 最近免费中文字幕4| 久久亚洲中文无码咪咪爱| 亚洲国产91精品无码专区| 国产三级在线免费观看| 亚洲国产精品久久久久婷婷软件 | 亚洲砖码砖专无区2023| 免费一级毛片不卡在线播放| 乱淫片免费影院观看| 亚洲AV无码一区二区三区系列| 91人人区免费区人人| 亚洲色大网站WWW永久网站| 免费国产a国产片高清| 国产一级黄片儿免费看| 亚洲熟妇无码久久精品| 成人影片麻豆国产影片免费观看 | 羞羞视频免费网站含羞草| 亚洲色中文字幕无码AV| 成人免费激情视频| 日韩免费在线中文字幕| 亚洲日本一区二区三区| 国产资源免费观看| 日韩精品无码免费一区二区三区 | 国产精品自在自线免费观看|