进程与线程的区别
提示:本文用于记录学习,如有误请指错我会及时纠正
前言
大家都知道进程可以有多个线程且至少拥有一个线程,一个进程下的线程资源是不共享的,那么具体怎么区分这个概念呢?提示:以下是本篇文章正文内容,下面案例可供参考
一、进程、线程是什么?
进程(Process):在早期的操作系统中并没有线程的概念,进程是拥有资源和独立运行的最小单位,也是程序执行的最小单位。
线程(英语:thread):是操作系统能够进行运算调度的最小单位。它被包含在进程之中,是进程中的实际运作单位。一条线程指的是进程中一个单一顺序的控制流,一个进程中可以并发多个线程,每条线程并行执行不同的任务。现在在开发和学习的过程中经常遇到许许多多的多线程问题,应该很好理解。
他们之间的关系该怎么理解呢?
这里可以看到一个进程占用一部分的内存,每个进程的内存是相互独立的,那么一个进程拥有一个或者多个线程,他们就能够在这块内存中共享数据。
那么线程之间是否拥有自己独立的资源呢?
肯定是有的,java当中有一个类ThreadLocal,他是一个线程内部的存储类,会储存当前线程中的资源,在线程执行完毕时需要清空资源,否则会造成内存溢出。(ThreadLocal类的相关知识点需要自行学习)
二、多线程
上面实际上已经表达完进程与线程之间的关系了,这里稍微对线程进行一点延伸。
进程在执行过程中拥有独立的内存单元,而多个线程共享内存,从而极大地提高了程序的运行效率
多个线程之间同时运行一般都会存在资源的抢夺问题,会造成并发问题。
1、Java 内存模型规定了所有的变量都存储在主内存中,每条线程有自己的工作内存。
2、线程的工作内存中会先从主内存中进行变量的拷贝,不会直接读写主内存,对变量的所有操作都是在工作内存中进行,并且对变量的写操作也不会马上同步到主内存中去。
3、不同的线程之间也无法直接访问对方工作内存中的变量,线程间变量的传递均需要自己的工作内存和主存之间进行数据同步进行。
三、结尾
这样就会导致出现公共变量出现修改失效,或者读取错误的情况
所以明白了进程与线程的概念之后,就需要开始进行多线程的学习了。