public class ReflectUtil {public static Object invoke(Object obj,String method,Object...param){ Class cls=obj.getClass(); try { if(param==null) return cls.getDeclaredMethod(method).invoke(obj); else{ Class[] clss=new Class[param.length]; for(int i=0;i cls=Class.forName(className); Method m=cls.getDeclaredMethod("getInstance"); return m.invoke(null); } catch (Exception e1) { return null; } } } public static void writeObject(Object obj,String path){ RandomAccessFile raf = null; ObjectOutputStream oos = null; FileOutputStream fos = null; try { raf = new RandomAccessFile(path, "rw"); fos = new FileOutputStream(raf.getFD()); oos=new ObjectOutputStream(fos); oos.writeObject(obj); } catch (Exception e) { e.printStackTrace(); } finally { try { if(raf != null) { raf.close(); } if(fos != null) { fos.close(); } if(oos != null) { oos.close(); } }catch(Exception ex) { ex.printStackTrace(); } } } @SuppressWarnings("unchecked") public static T readObject(String path){ RandomAccessFile raf = null; ObjectInputStream ooi = null; FileInputStream fis = null; try { raf= new RandomAccessFile(path, "rw"); fis = new FileInputStream(raf.getFD()); ooi=new ObjectInputStream(fis); Object obj=ooi.readObject(); return (T) obj; } catch (Exception e) { e.printStackTrace(); } finally { try { if(raf != null) { raf.close(); } if(ooi != null) { ooi.close(); } if(fis != null) { fis.close(); } }catch(Exception ex) { ex.printStackTrace(); } } return null; }}
/**
* 添加線程 * @param task */public static boolean submit(Runnable task){ try { DEFAULT_EXECUTOR.execute(task); return true; } catch (Exception e) { return false; }}/** * 添加線程 * @param task * @param millis 嘗試間隔 */public static void submitTaskBlock(Runnable task,long millis){ while(!submit(task)){ try { Thread.sleep(millis); } catch (Exception e) { e.printStackTrace(); } }}/** * 關閉線程池 */public static void shutdown(){ DEFAULT_EXECUTOR.shutdown();}public static void waitToShutdown(){ DEFAULT_EXECUTOR.shutdown(); while(!DEFAULT_EXECUTOR.isTerminated()){ try { Thread.sleep(1000); } catch (InterruptedException e) { } }}public static void waitToShutdown(long time){ DEFAULT_EXECUTOR.shutdown(); try { DEFAULT_EXECUTOR.awaitTermination(time, TimeUnit.MILLISECONDS); } catch (Exception e) { }}public static void shutdownNow(){ DEFAULT_EXECUTOR.shutdownNow();}/** * 添加線程 * @param task * @param millis 嘗試間隔 */public static void submitTaskBlock(Object obj,String method,Object param,long millis){ submitTaskBlock(new MethodRunner(obj, method, param),millis);}/** * 添加線程 * @param task */public static boolean submit(Object obj,String method,Object param){ return submit(new MethodRunner(obj, method, param));}/** * 添加線程 * @param task */public static boolean submit(ExecutorService executor,Runnable task){ try { executor.execute(task); return true; } catch (Exception e) { e.printStackTrace(); return false; }}/** * 添加線程 * @param task * @param millis 嘗試間隔 */public static void submitTaskBlock(ExecutorService executor,Runnable task,long millis){ while(!submit(executor,task)){ try { Thread.sleep(millis); } catch (Exception e) { e.printStackTrace(); } }}/** * 關閉線程池 */public static void shutdown(ExecutorService executor){ executor.shutdown();}public static void waitToShutdown(ExecutorService executor){ executor.shutdown(); while(!executor.isTerminated()){ try { Thread.sleep(1000); } catch (InterruptedException e) { } }}public static void waitToShutdown(ExecutorService executor,long waitTime){ executor.shutdown(); try { executor.awaitTermination(waitTime, TimeUnit.MILLISECONDS); } catch (Exception e) { }}public static void shutdownNow(ExecutorService executor){ executor.shutdownNow();}/** * 添加線程 * @param task * @param millis 嘗試間隔 */public static void submitTaskBlock(ExecutorService executor,Object obj,String method,Object param,long millis){ submitTaskBlock(executor,new MethodRunner(obj, method, param),millis);}/** * 添加線程 * @param task */public static boolean submit(ExecutorService executor,Object obj,String method,Object param){ return submit(executor,new MethodRunner(obj, method, param));}public static class BlockRejectedHandler implements RejectedExecutionHandler{ @Override public void rejectedExecution(Runnable r, ThreadPoolExecutor executor) { try { executor.getQueue().put(r); } catch (Exception e) { throw new RuntimeException("block queue reject!"); } }}public static class MethodRunner implements Runnable{ private Object obj; private String method; private Object[] param; public MethodRunner(Object obj,String method,Object... param){ this.obj=obj; this.method=method; this.param=param; } @Override public void run() { ReflectUtil.invoke(obj, method, param); }}public static class Run implements Runnable{ public String num; public Run(String num){ this.num=num; } public void run(){ try { Thread.sleep(3000); System.out.println("execute:"+num); } catch (Exception e) { } }}static boolean flag=true;public static void main(String[] args) { new Thread(){ @Override public void run() { int i=0; while(flag){ try { ThreadExecuteUtil.submitTaskBlock(ThreadExecuteUtil.PAD_DEAL_EXECUTOR,new Run("t1"+i),3000); i++; } catch (Exception e) { e.printStackTrace(); continue; }
// System.out.println(i);
}
}
}.start();
}
本文轉載自:http://www.itdaan.com/blog/2018/08/01/3ad1295b6c021148208a40ad712390fc.html