线程:
线程就是程序中的一条控制流,多线程就是多条控制流;线程是在进程的基础上,进一步划分;
进程是资源的基本单元;线程是调度的基本单位; 一个进程至少有一个线程,或多个线程;
进程更像操作系统对资源分配的单位;
线程是操作系统对处理机调度的单位;
线程自己不拥有系统资源,只拥有一点儿在运行中必不可少的资源,但它可与同属于一个进程的其他进程共享进程所拥有的全部资源。
程序执行流的最小单元。一个标准的线程由:线程ID、当前指令指针、寄存器集合、堆栈组成。
线程是进程中的实体,是被系统独立调度和分派的基本单位。
线程自己不拥有系统资源,只拥有一点儿在运行中必不可少的资源,但它可与同属于一个进程的其他进程共享进程所拥有的全部资源。
同一进程中的多个线程之间可以并发执行,由于线程之间的相互制约,致使线程再运行中呈现出间断性。线程有:就绪、阻塞、运行三种基本状态。
就绪:具备运行的所有条件,逻辑上可以运行,在等待处理机;
运行:指线程占有处理机正在运行;
阻塞:线程再等待一个事件(如某个信号量),逻辑上不可运行。
线程是程序中一个单一的顺序控制流程;
进程内有一个相对独立的、可调度的执行单元。是系统独立调度和分派CPU的基本单位指令运行时的程序的调度单位。
和进程的关系:
进程是资源分配的基本单位,线程是任务调度的基本单位;
线程实际上是轻量级进程,和进程可以看作是包含关系。没有线程的进程叫做单线程,一个进程可以有多个线程。线程是在进程的基础上继续划分线程;
进程有独立的代码和数据空间,进程的切换开销较大;线程可以看成轻量级进程,同一类线程共享代码和数据空间,但是线程有独立的栈和程序计数器PC,线程之间的切换开销小;
线程的状态:
同一进程中的多个线程之间可以并发执行,由于线程之间的相互制约,致使线程在运行中呈现出间断性。
线程有:就绪、阻塞、运行三种基本状态。
就绪:具备运行的所有条件,逻辑上可以运行,在等待处理机;
运行:指线程占有处理机正在运行;
阻塞:线程再等待一个事件(如某个信号量),逻辑上不可运行。
线程的意义:
进一步提升并发性,克服了进程的切换开销大的缺陷,减少时空开销;
线程进程都是由操作系统所体会的程序运行的基本单元。利用该基本单元实现系统对应用的并发性。线程的划分尺度更小,并发性更高。
进程在执行的过程中有独立的内存单元。而多个线程共享内存,极大提高了程序的运行效率。
每个独立的线程有一个程序运行的入口(入口函数),顺序执行序列和程序的出口。但是线程不能独立执行,必须依赖在应用程序中。
从逻辑角度看:多线程的意义在于一个应用程序中,有多个执行部分可以同时执行。但操作系统并没有将多个线程看成独立的应用,来进行进程的调度和管理以及资源分配。
进程是系统进行资源分配和调度的一个独立单位。
===================================================
线程安全:
进程之间有独立的内存空间,相互之间访问不到。
但是进程中有多个线程。每个线程都有各自的栈内存,这个栈内存也是各个线程自己私有的,别人访问不到;
但是进程中有公共的堆空间,是多个线程都可以访问得到的空间。如果大家都能访问到这个空间中的某个对象或方法。
那就存在数据被意外修改的风险,使得某个线程的数据被污染。这就是线程安全问题。
非线程安全是指多线程操作同一个对象可能会出现问题。而线程安全则是多线程操作同一个对象不会有问题。
为例保证线程安全,于是就有了一些机制:
例如CAS(compare and swap),保存数据的状态然后检查数据是否被修改了,被修改的话,就重头再来。->开销较大,适用于线程不多,数据被修改的概率不大,但是存在这种可能;
还有一种是加锁机制->也是有开销的,但是能保证数据不被修改,适用于线程较多,大概率数据会被修改的情况;
当我们用一些机制保证线程安全时,其实是存在一些代价的,就是增加了系统开销,导致性能下降。所以要根据实际情况取舍。
线程安全必须要使用很多synchronized关键字来同步控制,所以必然会导致性能的降低。
所以在使用的时候,如果是多个线程操作同一个对象,那么使用线程安全的Vector;否则,就使用效率更高的ArrayList。
非线程安全!=不安全
线程安全相关链接:
线程安全这么回答才牛逼:https://www.cnblogs.com/qiu18359243869/p/11009883.html
Java中的线程安全和非安全:https://www.cnblogs.com/lijingran/p/8722301.html
什么是线程安全:https://www.jianshu.com/p/f99a04cff60a
===================================================
相关链接:
线程的意义与常见面试题:https://www.cnblogs.com/yanglin666/p/10551661.html
多线程使用的主要目的:https://blog.csdn.net/qq_34512307/article/details/77283870
多线程的实际意义和优势:https://blog.csdn.net/liu123641191/article/details/80904522
多线程的优点和意义:https://blog.csdn.net/xiaokangboy/article/details/77969758
多线程的意义和线程的生命周期:https://baijiahao.baidu.com/s?id=1637095684358533046&wfr=spider&for=pc