/**
* 判断路径是否含有空格(含有空格Dos start命令无法识别)
*/
private static String setFilePath(String path) {
int index = path.indexOf(" ");
if (index != -1) {
path = path.replaceAll(" ", "\"" + " " + "\"");
}
System.out.println("Dos Star 路径问题:" + path);
return path;
}
/**
* 导入SQL文件
* @param path 文件保存路径
* @param textid 单位ID
*/
private void export(String path) {
try {
// 调用外部批处理文件 对SQL文件中的 INSERT 改写为 REPLACE
callbat(path);
//执行DOS命令
String temp1 = "cmd /c mysql -u root --password=sa bc <";
Process p1 = Runtime.getRuntime().exec(temp1 + setFilePath(path));
if(p1.waitFor() == 0){
//导入数据成功
import_message("1");
//导入之后进行合计计算
TotalUp.executeSum();
//合计失败
if (!TotalUp.executeSum()) {
System.out.println("导入后合计失败");
}
}
} catch (IOException e) {
//导入数据失败
import_message("0");
System.err.print(e);
}
}
因为当你在一个Process上调用waitFor方法时,当前线程是阻塞的,如果外部命令无法执行结束,那么你的线程就会一直阻塞下去,这种意外会影响我们程序的执行。所以在我们不能判断外部命令什么时候执行完毕而我们的程序还需要继续执行的情况下,我们就应该循环的使用exitValue来取得外部命令的返回状态,并在外部命令返回时作出相应的处理。
分享到:
相关推荐
QT线程使用实例详解 在QT框架中,线程(Thread)是实现多任务并行处理的关键技术。本文将深入探讨QT线程的使用方法,通过一个实例来展示多线程与单线程打印数字的异同,帮助你更好地理解和应用QT中的线程功能。 ...
2. wait()和sleep()方法的区别:wait()方法属于Object类,调用该方法时,线程会放弃对象锁,只有该对象调用notify()方法后本线程才进入对象锁定池准备获取对象锁进入运行状态。sleep()方法属于Thread类,sleep()导致...
- **线程安全问题**:多个线程同时访问和修改共享资源时可能导致数据不一致。解决办法通常是使用锁或其他线程安全的数据结构。 - **死锁问题**:当多个线程相互等待对方释放资源时,会发生死锁。可以通过合理设计...
`System.Timers.Timer`是一个异步定时器,它在单独的线程上触发`Elapsed`事件,避免了阻塞UI线程。 首先,`System.Timers.Timer`类是.NET框架提供的一个强大工具,它可以设置一个时间间隔,当这个间隔过去后,就会...
当一个线程修改了一个声明为`volatile`的变量时,其他线程能够立即看到这一变化。这主要通过禁止编译器和处理器进行某些类型的优化来实现,这些优化可能会导致线程看不到最新的变量值。 #### 示例代码分析 下面的...
### JavaScript多线程的实现方法 #### 背景与概念 在JavaScript中,传统的单线程模型限制了其在复杂应用中的性能表现。随着Web应用程序功能日益强大,多线程的支持变得越来越重要。虽然原生JavaScript是基于事件...
异步线程是计算机编程中的一个关键概念,特别是在多任务处理和提高系统性能方面。它允许程序在执行长时间运行操作时不会阻塞主线程,从而提高用户体验。在.NET框架中,`BackgroundWorker` 和 `Thread` 是两种常用的...
`wait()`和`pulse()`方法是`java.lang.Object`类的一部分,它们是`Monitor`操作的关键组成部分,用于线程间的通信和协作。 `Monitor.wait()`方法的作用是让当前持有对象锁的线程暂停执行,释放持有的锁,并进入等待...
开发者可以在创建新线程时保存当前的`SynchronizationContext`,然后在需要跨线程调用时使用它。例如: ```csharp SynchronizationContext context = SynchronizationContext.Current; // 创建新线程 new Thread...
在探究JVM线程状态以及Thread.sleep的实现原理时,我们首先需要了解Java线程与操作系统线程之间的关系。在Java虚拟机(JVM)中,每个线程通常都是以一对一的关系映射到操作系统线程上的。然而,尽管两者在实现上是...
CheckForIllegalCrossThreadCalls = False '不写这行,会出错,不允许线程的数据写到TextBox1.Text 中去。 Form2.Show() End Sub Private Sub form1_FormClosing(sender As Object, e As EventArgs) Handles Me....
需要说明的是,在执行notify()方法后,当前线程不会马上释放该对象锁,呈wait状态的线程也并不能马上获取该对象锁,到等到执行notify()方法的线程将程序执行完,也就是退出synchronized代码块后,当前线程才会释放锁...
// 没有客户时,服务线程等待 try { queue.wait(); } catch (InterruptedException e) { e.printStackTrace(); } } } } } } ``` 为了运行这些线程,我们需要一个启动脚本来创建队列、创建并启动`Service...
`volatile`关键字用于标记一个变量的状态变化对所有线程都是可见的,即当一个线程修改了某个用`volatile`修饰的变量时,其他线程能够立即看到修改的结果。 **示例代码**: ```java public class VolatileExample { ...
for (int i = 0; i ; i++) { synchronized (lock) { System.out.println(Thread.currentThread().getName() + ": " + i); try { lock.wait(); } catch (InterruptedException e) { e.printStackTrace(); } ...
终止线程是指当线程不再需要运行时,可以显式地停止它。这可以通过调用`Abort`方法实现,但需要注意的是,在某些情况下不推荐使用`Abort`,因为它可能会导致线程处于不稳定的状态或资源泄露。下面是一个终止线程的...
FileSplitter4Linux_多线程文件分割合并器.7z =========================================== 多线程文件分割、合并器 v2.0.1 for Windows / Linux
多线程模块已合并成类 用于多线程时 声明数组即可,数组(0)为 初始化,创建线程 1 - N 为 多线程。 启动线程示例: 控制台.标题 ("多线程控制台") If 线程(0).初始化 = False Then ‘重要,在main函数中...
for (int i = 0; i ; i++) { try { queue.put(i); // 添加元素到队列 } catch (InterruptedException e) { e.printStackTrace(); } } } } class Consumer implements Runnable { private BlockingQueue...
29 <br/>用VC++5实现多线程... 35 <br/>Windows95下多线程编程技术及其实现... 40 <br/>多线程编程应注意的问题... 44 <br/>多线程程序设计... 45 <br/>Visual C++ 5.0中的多线程编程技术......