0812(030天 线程/进程01)

进程线程基本概念、创建进程、实现在线程序执行
摘要由CSDN通过智能技术生成

0812(030天 线程/进程01)

每日一狗(田园犬西瓜瓜
30

线程/进程01

1. 基本概念

配置:单CPU单核

进程:

  • 系统分配资源的独立单位
  • 程序的执行过程
  • 相互之间隔离,不允许相互之间直接进行调度
  • 进程中间可以包含多个线程

cpu嘎嘎快,线程中多数为阻塞状态,再在进程中间开了一个线程

线程:

同一线程中可以存在多个顺序流

  • 多个线程可以存在于单个进程中
  • cpu将时间划分为若干个小节,时间一到,换下一个线程
  • 运行时会暂存一个计数器、寄存器和栈帧
  • cpu调度的最小单位

状态

  • 创建:进程创建后进入就绪状态
  • 就绪:除了cpu之外啥都有了。
  • 运行:
  • 阻塞:需要达到某种特定要求才能继续运行,满足需求后重新进入就绪状态
  • 终止:

2. 编程使用

2.1 创建进程

案例1:使用cmd运行段指令后关闭,将反馈信息输出到终端

package com.yang3;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;

public class Test01 {
	// 创建进程,运行cmd 中 ipconfig/all,获取终端运行结果
	public static void main(String[] args) throws IOException {
		test1();
		test2();
	}

	// 启动进程方法2
	public static void test2() throws IOException {
		Process p = Runtime.getRuntime().exec("cmd /c ipconfig/all");
		BufferedReader br = new BufferedReader(new InputStreamReader(p.getInputStream(), "GBK"));
		String ss = "";
		while ((ss = br.readLine()) != null) {
			System.out.println(ss);
		}
	}

	// 启动进程方法1:
	public static void test1() throws IOException {
		ProcessBuilder pb = new ProcessBuilder("cmd", "/c", "ipconfig/all");
		Process p = pb.start();
		BufferedReader br = new BufferedReader(new InputStreamReader(p.getInputStream(), "GBK"));
		String ss = "";
		while ((ss = br.readLine()) != null) {
			System.out.println(ss);
		}
	}

}

案例二:从终端获取一段java程序代码,将编译执行结果反馈到终端输出

package com.yang3;

import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.File;
import java.io.FileWriter;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.PrintWriter;

public class Test02 {

	public static void main(String[] args) throws IOException {
		BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
		File file = new File("T1.java");
		// 获取输入程序
		if (file.exists()) {
			file.delete();
			System.out.println("文件已存在");
		}
		StringBuilder sb = new StringBuilder();
		String ss = "";
		while (true) {
			ss = br.readLine();
			if ("quit".equals(ss)) {
				break;
			}
			sb.append(ss + "\n");
		}
		br.close();
		// 写出文件
		PrintWriter pw = new PrintWriter(new BufferedWriter(new FileWriter(file)));
		pw.print(sb);
		pw.close();
		// 编译 
		boolean flag = true;
		Process p = Runtime.getRuntime().exec("cmd /c javac T1.java");
		BufferedReader br2 = new BufferedReader(new InputStreamReader(p.getErrorStream(), "GBK"));
		while ((ss = br2.readLine()) != null) {
			System.err.print(ss);
			flag = false;
		}
		br2.close();
		// 运行程序并将反馈信息输出到终端
		if (flag) {
			long s1 = System.currentTimeMillis();
			Process p1 = Runtime.getRuntime().exec("cmd /c java T1");
			System.out.print(System.currentTimeMillis() - s1);
			BufferedReader br3 = new BufferedReader(new InputStreamReader(p1.getInputStream(), "GBK"));
			while ((ss = br3.readLine()) != null) {
				System.out.println(ss);
			}
			br3.close();
		}

	}

}

扩展小芝士

  • 谈优化,先谈标准
  • 输入输出判定:站在进程角度想,进来的数据就是输入流,出去的就是输出流
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值