1、什么是进程?
定义:进程是程序的一次执行;进程是一个程序及其数据在处理机上顺序执行时所发生的活动;进程是具有独立功能的程序在一个数据集合上运行的过程,它是系统进行资源分配和调度的一个独立单位。
进程的特征:动态性、并发性、独立性、异步性。
进程的三种状态:
就绪态:进程已经处于准备好运行的状态,一旦获取到CPU资源,便可立即执行。
阻塞态:进程由于发生某件事(IO请求、申请缓冲区失败后)暂时无法继续执行时的状态,继而进入到该资源的的阻塞队列中,进入到阻塞态。
运行态:进程获得CPU,其程序正在执行的状态。
三种状态的转换:
进程的两个基本属性:①进程是一个可拥有资源的独立单位。②进程又是可独立调度和分派的基本单位。
OS中引入进程的目的使多个程序并发执行,提高了资源的利用率和系统的吞吐量。但是因为进程所占有的时空开销(创建进程、撤销进程、进程切换等)较大,所以出现了线程,减少了程序在并发时所付出的时空开销,使OS具有更好的并发性。
2、 什么是线程?
线程是一种比进程更小的基本单位,线程具有许多传统进程所具有的特征,所以又成为轻量级进程。
3、 线程和进程的区别?
(1)调度的基本单位
进程是作为独立调用和分派的基本单位,但每次调度时,需要占用大量资源开销,而在引入线程的OS中,已把线程作为调度和分派的基本单位,线程的开销远远小 于进程。
(2) 并发性
不仅进程之间可以并发,而且在一个进程中的多个线程直接也可并发执行。
(3)拥有资源
进程可以拥有资源,并作为系统中拥有资源的一个基本单位。线程本身并不拥有系统资源,而是仅有一点必不可少的、能保证独立运行的资源。线程除了拥有少量的资源外,还允许共享该进程所拥有的资源。
(4)独立性
每个进程都拥有一个独立的地址控件和其他资源,除了共享全局变量外不允许其他进程访问;但同一进程中的不同线程之间往往为了提高并发性以及进行相互合作而 创建的,它们共享内存地址空间和资源。
(5) 系统开销
进程所需的开销大于线程所需的开销。
4、 Java中如何创建线程?
(1) 继承Thread类
public class Test extends Thread{
private String name;
public Test(String name) {
this.name = name;
}
@Override
public void run() {
while(true) {
System.out.println(name);
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
public static void main(String[] args) {
new Test("线程1").start();
new Test("线程2").start();
}
}
(2) 实现Runnable接口
public class Test2 implements Runnable{
private String name;
public Test2(String name) {
this.name = name;
}
@Override
public void run() {
while(true) {
System.out.println(name);
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
public static void main(String[] args) {
Thread t1 = new Thread(new Test2("线程1"));
Thread t2 = new Thread(new Test2("线程2"));
t1.start();
t2.start();
}
}
以上就是线程和进程的相关知识。