被分配唯一的ID,我需要插入其中有兩個columns-每個線程應該同時插入
ID Primary Key String
Data String
數據庫因此,這意味着ID應該是唯一的每一次,否則會拋出一個異常duplicate row in unique index
插入時。我需要在這個範圍內1-100000
之間做出選擇ID因此,這意味着每個線程應該使用唯一的ID始終在線
下面是多線程程序我寫了,將後每次插入到數據庫不同的獨特的ID從ArrayBlockingQueue
獲得。
所以這個程序將是線程安全或不是?或者還有沒有其他更好的方法來獲得每個線程每次唯一的ID?或者下面的程序可能會導致duplicate row in unique index
?
private static LinkedList<Integer> availableExistingIds = new LinkedList<Integer>();
public static void main(String[] args) {
for (int i = 1; i <= 100000; i++) {
availableExistingIds.add(i);
}
BlockingQueue<Integer> pool = new ArrayBlockingQueue<Integer>(200000, false, availableExistingIds);
ExecutorService service = Executors.newFixedThreadPool(10);
for (int i = 0; i < noOfTasks * noOfThreads; i++) {
service.submit(new ThreadTask(pool));
}
}
class ThreadTask implements Runnable {
private BlockingQueue<Integer> pool;
private int id;
public ThreadTask(BlockingQueue<Integer> pool) {
this.pool = pool;
}
@Override
public void run() {
try {
dbConnection = getDBConnection();
preparedStatement = dbConnection.prepareStatement(INSERT_SQL);
id = pool.take();
preparedStatement.setString(1, String.valueOf(id));
preparedStatement.setString(2, ACCOUNT);
preparedStatement.executeUpdate();
} finally {
pool.offer(id);
}
}
}
哪個數據庫?你不能使用「身份」類型嗎? –
我正在使用一個名爲XpressMP的新數據庫。你能否以身份解釋我是什麼意思? – AKIWEB