atomic류와hashmap의 조합
10331 단어 일상적
import java.util.HashMap;
import java.util.concurrent.atomic.AtomicBoolean;
import java.util.concurrent.atomic.AtomicLong;
/**
* hashmap Atomic
* hashmap key entry (hashmap )
* entry value atomic
* hashmap entry ,
*/
public class multiProcess implements Runnable {
String name ;
public multiProcess(String name){
this.name = name;
}
static class offsetInner{
public offsetInner(int offset){
this.offset = new AtomicLong(offset);
this.flag = new AtomicBoolean(false);
}
AtomicLong offset;
AtomicBoolean flag = new AtomicBoolean(false);
}
static HashMap, offsetInner> hashp = new HashMap<>();
public static void main(String[]args){
HashMap, offsetInner> map = new HashMap<>();
offsetInner offsetinner = new offsetInner(100);
hashp.put(1,new offsetInner(100));
hashp.put(2,new offsetInner(100));
Thread t1 = new Thread(new multiProcess("thread1"));
Thread t2 = new Thread(new multiProcess("thread2"));
Thread t3 = new Thread(new multiProcess("thread3"));
Thread t4 = new Thread(new multiProcess("thread4"));
Thread t5 = new Thread(new multiProcess("thread5"));
t1.start();
t2.start();
t3.start();
t4.start();
t5.start();
}
public void run() {
int i =10;
while(i>0) {
//System.out.println("aaaaaaa");
System.out.println(hashp.get(1).flag);
if (hashp.get(1).flag.compareAndSet(false, true)) {
hashp.get(1).offset.getAndIncrement();
System.out.println(name +": " +hashp.get(1).offset);
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
hashp.get(1).flag.set(false);
i--;
}
}
}
false
thread1: 101
true
false
thread2: 102
true
false
thread3: 103
true
false
thread4: 104
true
false
thread5: 105
false
thread1: 106
false
thread2: 107
false
thread3: 108
false
thread4: 109
false
thread5: 110
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
Codeforces 950 C. ZebrasOleg calls a non-empty sequence of days a zebra, if it starts with a bad day, ends with a bad day, and good and bad days...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.