1:要想了解多线程,必须先了解线程,而要想了解线程,必须先了解进程,因为线程是依赖于进程而存在。
2:什么是进程?
	通过任务管理器我们就看到了进程的存在。
	而通过观察,我们发现只有运行的程序才会出现进程。
	进程:就是正在运行的程序。
	进程是系统进行资源分配和调用的独立单位。每一个进程都有它自己的内存空间和系统资源。
	
3:多进程有什么意义呢?
	单进程的计算机只能做一件事情,而我们现在的计算机都可以做多件事情。
	举例:一边玩游戏(游戏进程),一边听音乐(音乐进程)。
	也就是说现在的计算机都是支持多进程的,可以在一个时间段内执行多个任务。
	并且呢,可以提高CPU的使用率。
	
	问题:
		一边玩游戏,一边听音乐是同时进行的吗?
		不是。因为单CPU在某一个时间点上只能做一件事情。
		而我们在玩游戏,或者听音乐的时候,是CPU在做着程序间的高效切换让我们觉得是同时进行的。
		
4:什么是线程呢?
	在同一个进程内又可以执行多个任务,而这每一个任务我就可以看出是一个线程。
	线程:是程序的执行单元,执行路径。是程序使用CPU的最基本单位。
	单线程:如果程序只有一条执行路径。
	多线程:如果程序有多条执行路径。
	
5:多线程有什么意义呢?
	多线程的存在,不是提高程序的执行速度。其实是为了提高应用程序的使用率。
	程序的执行其实都是在抢CPU的资源,CPU的执行权。
	多个进程是在抢这个资源,而其中的某一个进程如果执行路径比较多,就会有更高的几率抢到CPU的执行权。
	我们是不敢保证哪一个线程能够在哪个时刻抢到,所以线程的执行有随机性。
6:多线程(理解)
	(1)多线程:一个应用程序有多条执行路径
		进程:正在执行的应用程序
		线程:进程的执行单元,执行路径
		单线程:一个应用程序只有一条执行路径
		多线程:一个应用程序有多条执行路径
		
		多进程的意义?
			提高CPU的使用率
		多线程的意义?
			提高应用程序的使用率
	(2)Java程序的运行原理及JVM的启动是多线程的吗?
		A:Java命令去启动JVM,JVM会启动一个进程,该进程会启动一个主线程。
		B:JVM的启动是多线程的,因为它最低有两个线程启动了,主线程和垃圾回收线程。
	(3)多线程的实现方案(自己补齐步骤及代码	掌握)
		A:继承Thread类
		B:实现Runnable接口
	(4)线程的调度和优先级问题
		A:线程的调度
			a:分时调度
			b:抢占式调度 (Java采用的是该调度方式)
		B:获取和设置线程优先级
			a:默认是5
			b:范围是1-10
	(5)线程的控制(常见方法)
		A:休眠线程
		B:加入线程
		C:礼让线程
		D:后台线程
		E:终止线程(掌握)
	(6)线程的生命周期(参照	线程生命周期图解.bmp)
		A:新建
		B:就绪
		C:运行
		D:阻塞
		E:死亡
	(7)电影院卖票程序的实现
		A:继承Thread类
		B:实现Runnable接口
	(8)电影院卖票程序出问题
		A:为了更符合真实的场景,加入了休眠100毫秒。
		B:卖票问题
			a:同票多次
			b:负数票
	(9)多线程安全问题的原因(也是我们以后判断一个程序是否有线程安全问题的依据)
		A:是否有多线程环境
		B:是否有共享数据
		C:是否有多条语句操作共享数据
	(10)同步解决线程安全问题
		A:同步代码块
			synchronized(对象) {
				需要被同步的代码;
			}
			
			这里的锁对象可以是任意对象。
			
		B:同步方法
			把同步加在方法上。
			
			这里的锁对象是this
			
		C:静态同步方法
			把同步加在方法上。
			
			这里的锁对象是当前类的字节码文件对象(反射再讲字节码文件对象)
	(11)回顾以前的线程安全的类
		A:StringBuffer
		B:Vector
		C:Hashtable
		D:如何把一个线程不安全的集合类变成一个线程安全的集合类
			用Collections工具类的方法即可。
原文:http://www.cnblogs.com/shann/p/6854764.html