第一章
=====================================================================
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>    线程对立
3servlet 的线程安全性
    请求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 为每一个线程都提供一份变量,因此可以同时访问而互不影响