线程等待与通知 示例
1.定义一个final Object 的锁对象
/** * 脚本执行是否结束 */ private static boolean complete = false; /** * final Object 锁对象 */ private static final Object lock = new Object();
2.线程A执行脚本任务
对lock对象加锁,在执行完任务之后通知其余线程,并释放锁
// 执行脚本 Thread thread = new Thread(new Runnable() { @Override public void run() { if (list.size() == 0){ MainFrame.appendTextArea("ERROR 所选文件或目录下无sql脚本,请重新选择"); return; } synchronized (lock){ MainFrame.appendTextArea("所选目录下共 "+list.size()+" 个脚本"); for (File files : list){ MainFrame.appendTextArea("开始执行脚本:"+files.getName()); if (!execute(files,mysqlConnect)){ break; } } complete = true; lock.notifyAll(); } } }); thread.start();
3.线程B在脚本执行结束之后删除脚本
// 删除 Thread delete = new Thread(new Runnable() { @Override public void run() { synchronized (lock){ while (!complete){ try { lock.wait(); } catch (InterruptedException e) { e.printStackTrace(); } } FileUtils.deleteAllFiles(targetFile); } } }); delete.start();