进程和线程的区别
- 进程 : 系统分配资源的最小单位
- 线程 :系统的调度的最小单位 ;每一个进程至少含有一个线程,即主线程(系统级别的,c语言的主线程),但是java级别的主线程即main方法;
- 进程有自己的内存空间地址,而线程只独享指令流执行的必要资源,比如寄存器和栈
- 由于同一进程的各线程间共享内存和资源文件,可以不通过内核进行直接通信,减少资源的消耗
线程的优点
- 创建一个新的线程的代价比创建一个新进程小得多
- 与进程之间状态得切换相比,线程之间状态的转变需要操作系统耗费的资源要小的多
- 结束线程所需要的资源也比进程小的多
- 线程占用的CPU资源也比进程小的多
- 相比进程,可以充分利用多处理器的可并行数量
创建一个线程中使用start() 和 run() 两种方法的区别
- 代码行在那个线程执行,就由那个线程执行代码行。
- start() 方法启动的是这个线程,告诉系统调度本线程。并不会影响其他方法的调用。会向系统申请启动某个线程,如果该线程处于运行状态,会自动调run()方法。run()方法会通过Thread或Runnable类,定义要执行的任务代码。申请系统调度线程。
- 若是直接调用run(),这就只是作为main方法中普通方法的普通调用,会直接在main线程中运行。线程执行的任务。
多线程
多线程在什么场景下使用,以及多线程的优点和特性。
- 提高性能和效率,并发并行的执行代码。(有些代码串行执行耗时太长)。
- 遇到阻塞任代码,而导致后续代码无法去执行的时候。我们可以使用多线程,让后续代码不受阻塞代码的阻塞而去执行。
什么因素会影响多线程的效率
- 多线程的数量 。根据程序所需要的线程数量去设计多线程的数量
常用API
- 静态方法: 作用在当前代码行所在的线程,一般作用于当前线程。eg : activeCount(): 获取当前线程组中的,还存在的线程数量。currentThread() : 获取代码行当前线程。 interrupted() : 测试线程是否被打断 。sleep() : 当前线程休眠。单位为ms。yield() : 让当前线程让步(让步就是从运行态转变成就绪态,让出CPU资源)
- 实例方法:作用在调用的线程对象上。
1万+

被折叠的 条评论
为什么被折叠?



