从今天开始学习多线程编程应用的相关知识点,同时把之前学过的知识点继续做巩固练习与复习,新的章节新气象,好好学习,我们一起努力奋斗!
在学习新知识前,先对一些基础概念做一个简单的总结认识。
基础概念
程序:程序是为了完成某个特定任务,使用某种计算机语言编写的一组指令的有序集合。
进程:进程是具有一定独立功能的程序的运行过程,是系统进行资源分配和任务调度的一个独立单位。
线程:线程是进程中的一个独立执行线索,是CPU调度和分配的基本单位,自己基本上不拥有系统资源。
进程
进程是系统中正在运行的一个程序,程序一旦运行就是进程。
进程可以看成程序执行的一个实例。进程是系统资源分配的独立实体,每个进程都拥有独立的地址空间。一个进程无法访问另一个进程的变量和数据结构,如果想让一个进程访问另一个进程的资源,需要使用进程间通信,比如管道,文件,套接字等。
每个进程都有独立的代码和数据空间,进程切换成本较高,一个进程中可以包含1-n个线程,进程是资源分配的最小单位。同一个进程中的线程可能会有共享代码,可以共享进程的数据空间,每个线程由独立的运行栈和程序计 数器,线程切换的开销很小,线程是CPU调用的最小单位。
进程和线程一样分为5个阶段:创建、就绪、运行、阻塞和终止。
启动进程:
启动方法1:
ProcessBuilder builder=new ProcessBuilder("cmd","/c","ipconfig/all");//构建进程的对象
Process process=builder.start(); //启动进程 //获取ipconfig/all命令的执行结果
BufferedReader reader=new BufferedReader(new
InputStreamReader(process.getInputStream(),"GBK"));//用于获取ipconfig/all进程的执行结果
String tmp=null;
while((tmp=reader.readLine())!=null)
System.out.println(tmp);
String cmdStr="cmd /c ipconfig/all";
Process process=Runtime.getRuntime().exec(cmdStr);
BufferedReader reader=new BufferedReader(new
InputStreamReader(process.getInputStream(),"GBK"));//用于获取ipconfig/all进程的 执行结果
String tmp=null;
while((tmp=reader.readLine())!=null)
System.out.println(tmp);
进程三大特征:
独立性:进程是一个能够独立运行的基本单位,是系统资源分配和调度的独立单位
动态性:进程的实质就是程序的一次执行过程,动态的产生、动态的消亡
并发性:任何进程都可以同其它进程一起并发执行
并行与并发:
并行是指多个CPU或者多台机器同时执行一段处理逻辑,是真正的同时执行
并发是指通过CPU调度算法,使用户看上去似乎是在同时执行,实际从CPU操作层面上不是真正的同时执行
主线程
线程是进程中的一个实体,用来描述进程的执行,负责执行包括在进程内部地址空间中的代码 。
进程中线程之间的关系
一个进程中的线程之间没有父子关系之分,都是平级关系,所有线程都是一样的,一个退出不会影响另 外一个。但是在主线程中执行完毕可以使用System.exit(int)强制结束当前进程,exit方法会使整个进程停止,那么所有的线程都会自动退出。
进程与线程的区别:
线程具有许多传统进程所具有的特征,故又称为轻型进程或进程元;而把传统的进程称为重型进程,它相当于只有一个线程的任务。在引入了线程的操作系统中,通常一个进程都有若干个线程,至少包含一个线程。
根本区别:进程是操作系统资源分配的基本单位,而线程是处理器任务调度和执行的基本单位
资源开销:每个进程都有独立的代码和数据空间(程序上下文),程序之间的切换会有较大的开销;线程可以看做轻量级的进程,同一类线程共享代码和数据空间,每个线程都有自己独立的运行栈和程序计数器(PC),线程之间切换的开销小。
包含关系:如果一个进程内有多个线程,则执行过程不是一条线的,而是多条线(线程)共同完成的;线程是进程的一部分,所以线程也被称为轻权进程或者轻量级进程。
内存分配:同一进程的线程共享本进程的地址空间和资源,而进程之间的地址空间和资源是相互独立的
影响关系:一个进程崩溃后,在保护模式下不会对其他进程产生影响,但是一个线程崩溃整个进程都死掉。所以多进程要比多线程健壮。
执行过程:每个独立的进程有程序运行的入口、顺序执行序列和程序出口。但是线程不能独立执行,必须依存在应用程序中,由应用程序提供多个线程执行控制,两者均可并发执行
多线程
线程是进程中的一个执行实体,用来描述进程的执行,负责指向包括在进程内部地址空间中的代码 在Java中一个应用可以包含多个线程,每个线程执行特定任务,可以与其它线程并发执行引入多线程的目标在于减少CPU空转时间,提供CPU的利用率,java多线程提供了一个编程模型隐藏CPU在多任务间切换的实现细节,不需要修改代码就可以实现跨多CPU、多核的处理器。
多线程优缺点
多线程优点:
1.在多任务中,各个进程需要分配各自独立的地址空间;多线程可共享相同的地址空间并且分享同一个进程
2.进程间调用涉及的开销比线程通信多
3.线程间的切换成本比进程间切换的成本低
多线程的缺点:
1.设计更复杂,上下文切换开销,增加资源消耗
好了,今天就先学习到这里,记得做好总结与复习巩固哦!!!