close

java.util.concurrent.atomic 
操作請操考:https://kknews.cc/zh-tw/other/e52jny.html

 

public class UUIDThread extends Thread {
    private UUID uuid;

    public UUIDThread() {
    }
    
    public UUIDThread(UUID uuid){
        this.uuid = uuid;
    }

    @Override
    public void run() {
        for(int i = 0;i<10000;i++){
            this.uuid.getUuid();
        }
    }
}

 

import java.util.concurrent.atomic.AtomicInteger;

public class UUID {
    private AtomicInteger uuid = new AtomicInteger(0);
    public int getUuid(){
        return uuid.getAndIncrement();
    }
}

 

public class Test0610 {

    public static void main(String[] args) {        
        UUID uuid = new UUID();
        UUIDThread[] arr = new UUIDThread[2];
        for(int i = 0;i<arr.length;i++){
            arr[i] = new UUIDThread(uuid);
            arr[i].start();
        }
       
        for(int i = 0;i<arr.length;i++){
            try {
                arr[i].join();
            } catch (Exception e) {
                e.printStackTrace();
            }
        }
        System.out.println("uuid=" + uuid.getUuid());
    }
}

 

※Thead-Safe Colcetions

●java.util 內提供的容器都不是Thread-safe,要在多執行緒環境下正常執行,可以透過以下方式:

   ---存取時,自行利用synchronized保留字

   ---利用java.util.Collections.synchronizedXXX回傳同步容器

   ---利用java.util.concurrent內的容器

●利用以上方式表容器為thread-safe,但不代表其內容元素是thread-safe

 


import java.util.List;

public class ThreadTest2 extends Thread {
    private List l;

    public ThreadTest2(List l) {
        this.l = l;
    }

    @Override
    public void run() {
        for(int i = 0;i<10000;i++){
            l.add(i);
        }
        System.out.println(l.size());
    }
}

 

import java.util.Collections;
import java.util.List;

public class Test0610 {

    public static void main(String[] args) {
        List l = new ArrayList();
        List xl = Collections.synchronizedList(l);
        ThreadTest2 t1 = new ThreadTest2(xl);
        ThreadTest2 t2 = new ThreadTest2(xl);
        t1.start();
        t2.start();
    }
}
※最後一個都是20000

arrow
arrow
    文章標籤
    atomic java AtomicInteger
    全站熱搜

    淺翔 發表在 痞客邦 留言(0) 人氣()