2020.05.22软件构造听课笔记

并发:
网络上的多台计算机
一台计算机上的多个应用
一个CPU上的多核处理器

多用户并发请求服务器的计算资源
APP在手机端和在云端都有计算
GUI的前端用户操作和后台的计算同时进行

为什么要并发:
摩尔定律失效了
“核”变得越来越多
为了充分利用多核和多处理器,需要将程序转化为并行程序

共享内存:并发模块在内存中读写共享数据
消息传递:并发模块通过channel交换信息

共享内存:
两个处理器,共享内存
同一台机器上的两个程序,共享文件系统
同一个Java程序内的两个线程,共享Java对象

消息传递:
网络上的两台计算机,通过网络连接通讯
浏览器和Web服务器,A请求页面,B发送页面数据给A
及时通讯软件的客户端和服务器
同一台计算机上的两个程序,,通过管道连接进行通讯

并发模块的类型:进程和线程
进程:私有空间,彼此隔离
线程:程序内部的控制机制

进程:拥有整台计算机的资源
多进程之间不共享内存
进程之间通过消息传递进行协作

一般来说,进程==程序==应用
但一个应用可能包含多个进程
OS支持IPC机制(pipe/socket)支持远程间通信
不仅是本机的多个进程之间,也可以是不同的机器多个进程之间

进程=虚拟机,线程=虚拟CPU
程序共享、资源共享、都隶属于进程

每个应用至少有一个进程
主线程:可以创建其他的线程

匿名类:
优点:
明确了使用范围
读者不需要寻找定义类
缺点:
不能复用
代码过长时,影响理解

匿名类多用于短的一次性的方法实现

交错和竞争:
虽然有多线程,但在只有一个核的计算中,每个时刻只能执行一个线程
通过时间分片,在多个进程/线程之间共享处理器
即使是多核CPU,进程/线程的数目也往往大于核的数目

时间分片是由OS自动调度的

关键点:不能通过查看一个表达式来判断他是否在竞争条件下是安全的
“Thread Interference”线程干扰

消息传递机制也无法解决竞争条件问题

很难测试和调试是因为竞争条件导致的bug
因为interleaving的存在,导致很难复现bug

Thread.sleep(time)线程的休眠
将某个线程休眠,意味着其他线程得到更多的执行机会
进入休眠的线程不会数去对现有monitor或锁的所有特权,从休眠中苏醒后可以继续执行

interrupt()向线程发出中断信号
t.interrupt()其他线程向t发出中断信号

t.interrupt()执行后,t的中断状态设置为true
t.isInterrupted()检查t是否已在中断状态中,只是查询,不改变状态
Thread.Interrupted()检查当前线程是否已在中断状态中,并重置状态为false
注意:interrupt()和isInterrupt()是实例方法,interrupted()是类方法

Thread.join()让当前线程保持执行,直到其执行结束

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值