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 call = new Callable() {
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 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 方法的执行时间监控 设置超时(Future 接口)
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 future = new FutureTask(new Callable() {
@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()时候 等待查询完成