@Test
public void mulityThreadConnectionTest1() {
List<Thread> threads = new ArrayList<>();
for (int i = 0; i < 100; i++) {
int j = i;
Thread thread = new Thread(new Runnable() {
@Override
public void run() {
try {
Statement statement = connection.createStatement();
ResultSet resultSet = null;
if(j % 2 == 0 ) {
System.out.println("Thread is " + Thread.currentThread().getName() + "start to query");
resultSet = statement.executeQuery("select sleep(1000) ,id from test_oracle limit 1");
System.out.println("Thread name is : " + Thread.currentThread().getName() + "result is {}" +(resultSet.getMetaData()));
} else {
System.out.println("Other thread : " + Thread.currentThread().getName() + " start to query");
resultSet = statement.executeQuery("select id from test_oracle limit 1");
System.out.println("Thread name is : " + Thread.currentThread().getName() + "result is {}" +(resultSet.getMetaData()));
}
} catch (SQLException e) {
e.printStackTrace();
}
}
},"thread: " + i);
thread.start();
threads.add(thread);
}
threads.forEach(thread -> {
try {
thread.join();
} catch (InterruptedException e) {
e.printStackTrace();
}
});
}
@Test
public void mulityThreadConnectionTest2() {
List<Future> futures = new ArrayList<>();
for (int i = 0; i < 100; i++) {
int j = i;
CompletableFuture<Void> future = CompletableFuture.runAsync(new Runnable() {
@SneakyThrows
@Override
public void run() {
Statement statement = connection.createStatement();
ResultSet resultSet = null;
if (j % 2 == 0) {
System.out.println("Thread is " + Thread.currentThread().getName() + "start to query");
resultSet = statement.executeQuery("select sleep(1000) from dual limit 1");
System.out.println("Thread name is : " + Thread.currentThread().getName() + "result is {}" + (resultSet.getMetaData()));
} else {
System.out.println("Other thread : " + Thread.currentThread().getName() + " start to query");
resultSet = statement.executeQuery("select id from test_oracle limit 1");
System.out.println("Thread name is : " + Thread.currentThread().getName() + "result is {}" + (resultSet.getMetaData()));
}
}
});
futures.add(future);
}
CompletableFuture.allOf(futures.toArray(new CompletableFuture[futures.size()])).join();
}
测试结果发现,一个connection,多个并发同时用,底层还是串行的。