Java线程学习笔记(一):进程与线程

本文深入探讨了Java线程的概念、内存管理机制,以及多线程带来的优势与潜在问题。阐述了进程与线程的关系,详细解释了线程如何共享进程资源,以及在多处理器环境下的并发执行方式。同时,分析了多线程的优点和缺点,如提高CPU利用率、减少开销等,以及如何有效避免线程间的同步问题。

一、概念

 

进程:系统资源分配的基本单位,又是调度运行的基本单位。

        例如,用户运行了一个程序,系统就为该程序创建一个进程,并为它分配资源,包括各种表格、内存空间、磁盘空间、I/O设备等。然后,该进程放入进程的就绪队列,进程调度程序选中它,并为它分配CPU以及其它资源,该进程才真正运行,所以,进程是系统系统中并发执行的单位。

        在Mac、Windows NT采用微内核结构的操作系统中,进程的功能发生了变化,它只是资源分配的单位,而不再是调度运行的单位,在微内核系统中真正调度运行的基本单位是线程,因此,实现并发功能的是线程。

 

线程:线程是进程中执行运算的最小单位(亦即执行处理器调度的基本单位),线程是程序中的一个执行流,每个线程都有自己的专有寄存器(栈指针、程序计数器等),但代码区是共享的,即不同的线程可以执行同样的方法(函数)。

        如果把进程理解为在逻辑上操作系统所完成的任务,那么线程表示完成该任务的许多可能的子任务之一。

        例如,假设用户启动了一个窗口中的数据库应用程序,操作系统将对数据库的调用表示为一个进程。

        假设用户要从数据库中产生一份工资单报表,并传到一个文件中,这是一个子任务;在产生工资单报表的过程中,用户又可以输入数据库查询请求,这又是一个子任务。这样,系统则把每一个请求——工资单报表和新输入的数据库查询,表示为数据库进程中的独立线程。

        线程可以在处理器上独立调度执行,这样在多处理器环境下,就允许几个线程各自在单独的处理器上运行。操作系统提供线程就是为了方便而有效的实现这种并发性。

 

多线程:多线程是指程序中包含多个执行流。即在一个程序中可以运行多个不同的线程来执行多个不同的任务,也就是说允许单个程序创建多个并行执行的线程来完成各自的任务。

 

二、内存

 

每一个进程都从一个主线程开始执行,但可以在它拥有的线程中创建额外的线程。

一个进程的所有线程共享进程的虚拟地址空间和系统资源,一个线程的资源包括线程的机器寄存器设置,内核堆栈,线程环境变量和进程虚拟地址中的用户堆栈。

 

三、引入线程的好处

  1. 易于调度
  2. 提供并发性。通过线程可以方便有效的实现并发。进程可创建多个线程来执行同一程序的不同部分。
  3. 开销少。创建线程比创建进程要快,所以开销很少。
  4. 利于充分发挥多处理器的功能。通过创建多线程进程(即一个进程可以具有两个或更多个线程),每个线程在一个处理器上运行,从而实现应用程序的并发性,使每个处理器都得到充分利用。

四、进程与线程的关系

  1. 一个程序至少有一个进程;一个进程可以多个线程,但至少要有一个线程;一个线程只能属于一个进程。
  2. 资源分配给进程,同一个进程中的所有线程共享该进程的所有资源。
  3. 处理器分配给线程,即真正在处理器上运行的是线程
  4. 线程在执行过程中,要求协作同步。不同进程的线程间,要利用消息通讯的办法实现同步。

五、多线程的优劣

 

优点:可以提高CUP的利用率。在多线程的程序中,一个线程必须等待的时候,CPU可以运行其它的线程而不是等待,这样大大提高了程序的执行效率,同时也提高了系统资源的利用率。

 

缺点:

  • 线程也是程序,所以线程需要占用内存,线程越多占用内存也越多;
  • 多线程需要协调和管理,所以需要CPU时间跟踪线程;
  • 线程之间对共享资源的访问会相互影响,必须解决公用共享资源的问题;
  • 线程太多会导致控制太复杂,最终可能造成很多bug;

Java线程学习笔记(二):线程的创建

 

注:本文源自互联网,经过查阅网上资料整理而成,如涉及到他人整理的成果,在此表示感谢。由于涉及到的参考文章比较多,在此就不再一一列举。

本文是目前个人理解的结果,仅供参考,如后续发现问题,本人会进行相应的更正,也欢迎各位对Java线程感兴趣的朋友或者前辈进行指正。

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值