java blockingqueue 多线程操作顺序执行问题


在多线程环境下 多个线程操作同一个blockingqueue 能不能做到按顺序从队列里取出元素呢?
目前下面这样处理使用多个线程获取队列中的数显示出的顺序是乱的
如果这样无法实现多个线程按顺序操作队列的话那这个是不是就不能作为异步数据库操作的队列了?
因为很可能需要连续处理的两个数据库操作执行顺序是颠倒的
第一次接多线程和队列,希望各位来指点指点

   
  class WriteThread implements Runnable {
  
static BlockingQueue<Integer> numQueue;
static {
int queuesize = 100;
numQueue = new LinkedBlockingQueue<Integer>(queuesize);
for (int i = 0; i < queuesize; i++) {
numQueue.offer(i);
}
}

public WriteThread() {
}

@Override
public void run() {
try {
while (true) {
Integer num;
num = numQueue.take();
if (null == num)
break;
System.out.println(num);
}
} catch (InterruptedException e) {
e.printStackTrace();
}

}

}



相关链接

java 多线程

快要坏掉的番茄 9 years, 5 months ago

取肯定是按顺序取的,这是由队列的结构决定的。顺序乱了是因为多线程竞争导致的。如果你要多线程按顺序打印,那为何又要用多线程,直接用单线程不就行了吗?

夜魅D小调 answered 9 years, 5 months ago

Your Answer