public static String main2(final String sql,final int a) { String obj = null; System.out.println("等待執行的sql==" + sql); final ExecutorService executorService2 = Executors.newFixedThreadPool(1); Callable<String> call = new Callable<String>() { ResultSet res = null; PreparedStatement stmt = null; int ab=0; @Override public String call() throws Exception { stmt = getCurrentConnection().prepareStatement(sql); if (a==1) { res = stmt.executeQuery(); }else { ab=stmt.executeUpdate(); } close(stmt, res); return "true"; } }; try { Future<String> future = executorService2.submit(call); obj = future.get(); } catch (Exception e) { // TODO: handle exception } executorService2.shutdown(); if (executorService2.isShutdown()==false) { executorService2.shutdownNow(); } return obj; }
future 等待完成查詢 不用設置等待時間 ,查詢和修改方法不同java
java 方法的執行時間監控 設置超時(Future 接口)sql
import java.util.concurrent.Callable; import java.util.concurrent.ExecutionException; import java.util.concurrent.ExecutorService; import java.util.concurrent.Executors; import java.util.concurrent.FutureTask; import java.util.concurrent.TimeUnit; import java.util.concurrent.TimeoutException; public class FutureTest { public static void main(String[] args) { ExecutorService executor = Executors.newSingleThreadExecutor(); FutureTask<String> future = new FutureTask<String>(new Callable<String>() { @Override public String call() throws Exception { // TODO Auto-generated method stub Thread.sleep(1000); System.out.println("---------aaaa------------"); return "aaa"; } }); executor.execute(future); try { String result = future.get(5000, TimeUnit.MILLISECONDS); System.out.println(result); } catch (InterruptedException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (ExecutionException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (TimeoutException e) { // TODO Auto-generated catch block e.printStackTrace(); }finally{ future.cancel(true); executor.shutdown(); } } }
future.get()時候 等待查詢完成ide