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