0
ReentrantLock
을 SpringXD에서의 작업에 추가하려고 시도하지만 가끔씩 스레드 간 중단이있는 것으로 보입니다. 예를 들어ReentrantLock이 SpringXD에서 작동하지 않는 이유
, 나는이 코드를 가지고 :
public class LoadGenerator extends MessageProducerSupport {
private final AtomicBoolean running = new AtomicBoolean(false);
private ExecutorService executorService;
Logger logger = LoggerFactory.getLogger(LoadGenerator.class);
public LoadGenerator(){}
@Override
protected void doStart() {
executorService = Executors.newFixedThreadPool(2);
if (running.compareAndSet(false, true)) {
for (int x = 0; x < 10; x++) {
executorService.submit(new Producer(Integer.toString(x)));
}
}
}
@Override
protected void doStop() {
if (running.compareAndSet(true, false)) {
executorService.shutdown();
}
}
protected class Producer implements Runnable {
String prefix;
Lock lock = new ReentrantLock();
public Producer(String prefix) {
this.prefix = prefix;
}
private void send() {
lock.lock();
try{
for(int i = 0; i < 10; i++){
System.out.println(Thread.currentThread().getName() + " " + i);
}
}finally{
lock.unlock();
}
}
public void run() {
send();
}
}
}
내가 무엇을, 그것에서 기대하는 모든 스레드의 순서와 순서가 중단되어서는 안
pool-604-thread-1 0
pool-604-thread-1 1
pool-604-thread-1 2
pool-604-thread-1 3
pool-604-thread-1 4
pool-604-thread-1 5
pool-604-thread-1 6
pool-604-thread-1 7
pool-604-thread-1 8
pool-604-thread-1 9
pool-604-thread-2 0
pool-604-thread-2 1
pool-604-thread-2 2
pool-604-thread-2 3
pool-604-thread-2 4
pool-604-thread-2 5
pool-604-thread-2 6
pool-604-thread-2 7
pool-604-thread-2 8
pool-604-thread-2 9
...
같은 목록입니다,하지만, 사실 때때로 다음과 같은 방해가 있습니다 :
pool-604-thread-1 0
pool-604-thread-2 0
pool-604-thread-2 1
pool-604-thread-2 2
pool-604-thread-1 1
pool-604-thread-1 2
pool-604-thread-1 3
무엇이 잘못 되었습니까? 잠금은 이클립스의 localhost에서 잘 작동한다.
SpringXD는 분산 시스템인가요? 하지만 xdadmin에 하나의 xdcontaier 만 연결되어 있습니다.
감사합니다.
이 어색는 ... 사람, 내 실수는 ... 나는 그들이 알고 자물쇠를 나눠 줘야 해 ... 그냥 ... 내가 게시하기 전에 다시 확인해야 해.하지만 어쨌든, 고마워. – cinqS