Java中的Thread和执行Windows的cmd命令

import java.io.IOException;
import java.text.SimpleDateFormat;
import java.util.Date;


public class Main {

	public static void main(String []args){
		
		
		
		int i=0;
		
		
		String cmd="calc";
		
		try {
			Runtime.getRuntime().exec(cmd).waitFor();
		} catch (InterruptedException e1) {
			// TODO Auto-generated catch block
			e1.printStackTrace();
		} catch (IOException e1) {
			// TODO Auto-generated catch block
			e1.printStackTrace();
		}
		
		new Thread(new Runnable() {

			public void run() {
				while(true){
					
					System.out.println("123123         ");
					try {
						String ccmd="calc";
						Runtime.getRuntime().exec(ccmd).waitFor();
						Thread.sleep(1000);
					} catch(IOException e){
						e.printStackTrace();
					}catch (InterruptedException e) {
						e.printStackTrace();
					}
				}
		
			}
		}).start();
		
		while(true)
		try {
			
			SimpleDateFormat df=new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
			
			System.out.println(df.format(new Date())+"         "+i++);
			Thread.sleep(1000);
		} catch (InterruptedException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
	}
}

 

### 回答1: JavaThread的join方法是用来等待一个线程执行完成的,在该线程执行完成之前,当前线程会一直处于阻塞状态。join方法有两个重载方法: 1. join():表示当前线程等待被调用线程执行完成。 2. join(long millis):表示当前线程等待被调用线程指定的毫秒数,如果在这个时间内被调用线程没有执行完成,则当前线程会自动恢复执行。 可以使用join方法来保证cmd命令执行完成后再返回结果。具体实现可以参考以下代码: ```java Process p = Runtime.getRuntime().exec("cmd /c dir"); p.waitFor(); // 等待cmd命令执行完成 InputStream is = p.getInputStream(); BufferedReader reader = new BufferedReader(new InputStreamReader(is)); String line; while ((line = reader.readLine()) != null) { System.out.println(line); } ``` 在该代码,使用Process类来执行cmd命令,并使用waitFor方法来等待命令执行完成。在命令执行完成后,通过InputStream获取输出结果并打印出来。 ### 回答2: 首先,我想纠正一下问题的一个错误。Java线程的`ready`方法是不存在的,我想您可能是想到的是`isAlive`方法。 `isAlive`方法用于判断一个线程是否处于活动状态(是否已启动且尚未终止)。当一个线程启动后,它的`run`方法开始执行,直到`run`方法执行完毕或线程被终止,该线程才算活动完成。在`run`方法执行期间,线程可以执行各种操作,例如输出到命令行窗口(cmd)。 在命令行窗口,输出的内容是逐行显示的,因此当一个线程正在输出内容时,命令行窗口可能尚未完全显示全部内容。这意味着在线程完成输出之前,使用`isAlive`方法获取该线程的状态可能会返回`false`。 要确保线程在输出完成后返回`false`,可以在主线程使用`join`方法等待线程执行完成。`join`方法会阻塞主线程,直到指定的线程完成为止。 以下是一个示例代码,展示了如何使用`join`方法等待线程执行完成: ```java public class Main { public static void main(String[] args) throws InterruptedException { Thread thread = new MyThread(); thread.start(); // 等待线程执行完成 thread.join(); System.out.println("线程执行完成"); } static class MyThread extends Thread { @Override public void run() { // 执行线程操作,例如输出内容到命令行窗口 for (int i = 0; i < 10; i++) { System.out.println("输出内容: " + i); try { Thread.sleep(1000); } catch (InterruptedException e) { e.printStackTrace(); } } } } } ``` 在上述代码,`join`方法会阻塞主线程,直到`MyThread`线程执行完毕。只有在`MyThread`线程执行完成后,才会输出"线程执行完成",确保线程的全部输出已经显示在命令行窗口。 希望这个解答对您有所帮助! ### 回答3: Java的线程类并没有`rend()`方法。我猜你可能是想问`join()`方法。 在Java,如果一个线程调用了另一个线程的`join()`方法,那么调用`join()`方法的线程将会等待被调用线程执行完毕后再继续执行。如果线程在`join()`方法被调用前就已经执行完毕,那么`join()`方法将会立即返回。 在使用命令行Java编译器和执行器(如javac和java命令)时,主线程会等待程序的所有线程执行完毕后再退出。所以,在命令行执行Java程序时,主线程会等待所有线程的执行完毕,不管是否使用了`join()`方法。 因此,在命令行执行Java程序时,无论调用线程的`join()`方法是否完成,都会返回false。只有当一个线程调用`join()`方法且等待的线程执行完毕后,`join()`方法才会返回true。 无论是在命令行还是其他环境,`join()`方法用于协调不同线程的执行顺序,确保线程的有序执行
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值