JAVA并行编程-第一章 概述-学习总结

本文深入探讨了操作系统中进程与线程的概念,分析了多线程编程的优势与挑战,详细解释了线程安全的重要性及其实现方式。此外,还讨论了Java线程在Linux和Windows平台上的实现。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

第一章 概述

计算机操作系统使得计算机每次都能运行多个程序,并且不同程序都能在单独的进程中运行:操作系统为各个独立执行的进程分配各种资源,包括内存,文件句柄以及安全证书等。

基于以下因素, 加入os:
资源利用率。在等待一个程序的外部操作执行完成的过程中同时运行另一个程序,提高资源利用率。
公平性。不同程序和用户能够共享计算机资源,而不是由一个程序从头运行到尾,再启动下一个程序。
便利性。每个程序执行一个任务并在必要的时候通信,比只写一个程序计算所有任务要容易实现。

进程与线程概念
在现代操作系统中,进程支持多线程。

  • 进程是资源管理的最小单元,
  • 线程是程序执行的最小单元。

线程作为调度和分配的基本单位,进程作为资源分配的基本单位。

一个进程的组成实体可以分为两大部分:线程集和资源集。进程中的线程是动态的对象;代表了进程指令的执行。资源,包括地址空间、打开的文件、用户信息等等,由进程内的线程共享。
多进程与多线程
多进程:并行实体之间不共享同一个地址空间和所有可用数据。
多线程:并行实体之间共享同一个地址空间和所有可用数据。
1、线程比进程更加轻量级,线程的创建、切换等过程比进程开销小,线程的通信比进程间的通信简单。
2、进程的安全性高于线程,因为不共享。
多线程的实现方式

  • 内核线程实现
  • 用户线程实现
  • 用户线程加轻量级进程混合实现
    Java线程实现在linux和windows平台上均采用的是内核线程实现,Java线程与内核线程为一比一的对应关系,也就是说Java线程由内核直接调度。

多线程面临的挑战

  • 线程通信
  • 上下文切换
  • 死锁
  • 资源限制
  • 线程安全

线程通信
多线程相当于是多个线程为了完成一件“大事”而协同工作,那这多个线程之间如何协同就是线程通信的问题了。
线程间的通信是多线程编程的基础,线程间通信方式有两种:共享内存和消息传递。Java线程间的通信机制为共享内存方式。
线程间通信就要保证通信的可靠性,确保信息的可靠传递。这就涉及到线程安全的问题。

线程安全
线程安全最核心的概念是正确性

在操作系统中,正确性是指多个线/进程读写共享数据,最后的结果与线/进程运行的精准时序无关,亦即不存在竞争条件
在Java中,正确性是指:某个类的行为与其规范完全一致。当多个线程访问某个类时,不管运行时环境采用何种调度方式或者这些线程将如何交替执行,并且在主调代码中不需要任何额外的同步或协同,这个类都能表现出正确的行为,那么就称这个类是线程安全的。

可以将Java线程安全按由强到弱分为5类,同时也可以看到线程安全的责任由对象本身向调用者的转移:

1.不可变
不可变对象一定是线程安全的,无论是对象的方法还是方法的调用者,都不需要再采取任何的线程安全保障措施。(final关键字的使用)
2.绝对线程安全
不管运行时环境如何,调用者都不需要任何额外的同步措施。这个要求非常严格,Java API中大多数都不是绝对线程安全的类。
3.相对线程安全
保证对某个对象的单独操作是线程安全的,在调用的时候不需要做额外的同步措施。但是对于同一个对象的特定顺序的连续调用,可能需要在调用端做额外的同步手段(多为扩大同步范围)来保证调用的正确性。Java中大部分线程安全类属于相对线程安全。
4.线程兼容
对象本身不是线程安全的,但是可以通过在调用端正确地使用同步手段来保证对象在并发环境下的线程安全性。Java中的普通类。
5.线程对立
无论调用端是否采取了同步措施,都无法在并发环境中使用。

多线程编程的出发点
并发编程的基本出发点:先保证正确性,再提高效率

保证正确性有三种方式:

  • 互斥同步
  • 非阻塞同步
  • 无同步方案

线程的优势
1.发挥多处理器的强大能力
2.建模的简单性
3.异步事件的简化处理
4.响应更加灵敏的用户界面(GUI,Graphical User Interface)

线程的风险
1.安全性问题
2.活跃性问题
3.性能问题

框架通过框架线程中调用应用程序代码将并发性引入到程序中。在代码中将不可避免地访问应用程序状态,因此所有访问这些状态的diamante路径都必须是线程安全的。

  • TImer
  • Servlet 和 JavaServer Page(JSP)
  • Remote Method Invocation,RMI 远程方法调用
  • Swing 和 AWT
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值