<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 ゞ沉默是金ゞ 閱讀(967) 評論(0)  編輯  收藏 所屬分類: Java SE
    主站蜘蛛池模板: 亚洲第一第二第三第四第五第六| 一区二区三区在线免费| 免费黄色大片网站| 人妻巨大乳hd免费看| 久久精品国产亚洲AV麻豆不卡| 亚洲免费闲人蜜桃| 国产成人高清精品免费软件| av电影在线免费看| 亚洲国产模特在线播放| 亚洲国产精品国产自在在线 | 国产日本亚洲一区二区三区| 国产乱子影视频上线免费观看| 久操视频免费观看| 亚洲精品无码av人在线观看| 99在线精品视频观看免费| 欧洲精品码一区二区三区免费看| 亚洲av激情无码专区在线播放| 免费精品无码AV片在线观看| 亚洲风情亚Aⅴ在线发布| 亚洲国产精品久久久久婷婷老年 | 精品在线免费视频| 亚洲黄色在线播放| 国产免费的野战视频| 国产福利免费视频| 亚洲色偷偷偷综合网| 亚洲av不卡一区二区三区| www亚洲一级视频com| 免费看国产成年无码AV片| jzzijzzij在线观看亚洲熟妇| 亚洲国产精品自在拍在线播放 | 亚洲无av在线中文字幕| 拍拍拍又黄又爽无挡视频免费| 97在线免费观看视频| 国产综合成人亚洲区| 亚洲ts人妖网站| 高清在线亚洲精品国产二区| 国产在线观看免费观看不卡| 人妻无码一区二区三区免费| 久久九九免费高清视频| 精品视频免费在线| 香蕉视频亚洲一级|