第一章
=====================================================================
1:进程的定义:
进程是一种活动,它是由一个动作系列组成,每个动作是在某个数据集上执行一段程序,整个活动的结果是提供一种系统或用户功能。
2:进程与程序的区别
1> 进程是程序的一次运行活动,属于一种动态的概念。
程序是一组有序的静态指令,是一种静态的概念。
2> 一个进程可以执行一个或多个程序。
3> 程序可以作为一种软件资源长期限保持着,而进程则是一次执行过程.
3:进程的特性
1> 并发性
2> 不确定性
4:进程的结构
1> 程序 描述了进程所要完成的功能.
2> 数据集合 为一个进程独占,为进程的可修改部分。
3> 进程控制块包含了进程的描述信息和控制信息,是进程动态特性的集中反映。
5:线程的定义
线程是一个程序,或者进程内部的一个顺序控制流。线程本身不能独立运行,必须在进程中执行,使用进程的地址空间。每个线程有自己单独的程序计数器。
6:多线程定义
一个进程内部包含多个顺序控制流,或者并发执行多种运算,就是多线程。
7:线程分为三部分
1> 虚拟cpu
2> 虚拟cpu执行的代码
3> 数据
8:线程的基本控制
Start 启动线程
Sleep 让当前线程暂停一段指定的时间
Join 让一个线程等待另一个线程的完成
9:终断线程的三种方式
1> run 方法正常返回
2> run()发生意外
3> 应用程序终止
10:和线程中断相关的方法
1> interrupt 向线程发送中断
2> isInterrupted 测试线程是否已经被中断
3> Interrupted 测试当前线程是否已经被中断
11:线程的分类
1> 用户线程
2> 守护线程
第二章:构建线程安全的应用程序
=====================================================================
1:线程安全的核心问题
如果其他的线程访问一个处于不可用状态的对象,该对象不能正确响应用从而产生无法预料的后果,如何避免这种情况发生是线程安全的核心问题。
2:线程安全性的类别
1> 不可变
2> 线程安全
3> 有条件的线程安全
4> 线程兼容
5> 线程对立
3:servlet 的线程安全性
请求servlet的过程:
1>Servlet状态:
a> 无状态servlet
b> 有状态servlet (servlet中有实例变量)这种方式有可能发生线程不安全性。
2>解决线程不安全性的方式
a:取消servlet的实例变量,变为无状态的servlet。
b:对共享数据进行同步操作,使用synchronized关键字能保证一次只有一个线程访问被保护的区段.
4> servlet线程安全问题只有在大量的并发时才会显示出来,并且很难发现
线程安全问题主要是由实例变量造成的,因在servlet中避免使用实例变量.
4:同步与互斥
1> 线程通信主要是通过共享访问字段或者字段引用对象完成的,可能出现两个问题:
线程干扰
内存一致性错误
防止这两种错的工具就是同步(synchronized).
2>临界区定义
当两个线程需要使用一对象时,存在交叉操作而破坏数据的可能性
3> synchronized
支持内在锁,可以放在方法,对象,类的前面
4> 另一种同步机制,
volatile 变量 确保读写操作都是原子性的.
5: 活性
并发应用程序按照及时方式执行的能力称为活性。包括三种类型问题:死锁,饿死,活锁.
1> 死锁
指程序运行中,多个线程竞争共享资源时可能出现的一种系统状态,每个线程都被阻塞,都不会结束,进入一种永久等待状态。
2> 饿死 starvation
一个线程不能获得对共享资源的常规访问,并且不能继续工作,当共享资源被贪婪线程长期占有而不可用时,就会发生这样的情况
3> 活锁 livelock
一个线程经常以另一个线程的操作作出响应,如果另一个线程的操作也对这个线程的操作作出响应,那么就可能导致活锁。
6: ThreadLocal 本地线程
它并不是一个Thread,而是thread的局部变量.
1> threadLocal 和线程同步机制有哪些优点?
两者都是为了解决多线程中相同变量的访问冲突问题。
A: 线程同步机制程序设计和编写难度相对较大.
B: threadLocal提供了线程安全的共享对象.
C: 多线程资源共享问题
同步采用以时间换空间方式
threadLocal 以空间换时间的方式
d:同步机制仅提供一份变量,让不同线程排队访问
threadlocal 为每一个线程都提供一份变量,因此可以同时访问而互不影响
转载于:https://blog.51cto.com/wen5566/503604