1.多任务处理有两种类型:基于进程(-独享内存地址空间);基于线程(-在进程内部共享内存地址空间)——————{1.继承Thread重写;run()方法;new出子类对象;调用start();2.实现Runnable;new出Thread对像;调用start()}。
2.进程是指一种“自包容”的运行程序,有自己的地址空间;线程是进程内部单一的一个顺序控制流
3.基于进程的特点是允许计算机同时运行两个或多个的程序
4.基于线程的多任务处理环境中,线程是最小的处理单位
线程概述
可以将在一个Java虚拟机中运行的多线程程序堪称是一个操作系统中运行的多个进程
创建和启动线程
1通过以下两种方法创建Thread对象:
-声明一个Thread类的子类,并覆盖run()方法。
class mythread extends Thread{
public void run(){/覆盖方法\}
-声明一个实现Runnable接口的类,并实现run()方法
class mathread implements Runnable{
public void run(){\实现该方法}}
线程状态
1. 新建状态;{通过new出thread对象}
2. 就绪状态;{执行start方法之后,执行run方法之前}
3. 运行状态;{执行run方法}
4. 中断状态;{中断原因:
1.由于优先级关系,线程没有抢到CPU,优先级最小为1级,最大为10级,默认为5级,this.setPriority(Thread.MIN-PRIOR);
2.使用sleep()使线程休眠,sleep方法到点是让线程重新参与竞争,不是到点就能直接进去;
3.阻塞(i/o事件)
4.wait——notify机制;使线程等待
5.挂起yield(),线程已显示出让CPU控制权 }
5. 死亡状态;{run方法执行结束(清理内存,回收空间)}
线程同步
有时两个或多个线程可能会试图同时访问一个资源 在此情况下,数据可能会变得不一致 为了确保在任何时间点一个共享的资源只被一个线程使用,使用了“同步” 使用同步关键字synchronized来进行标记
线程安全性问题:
描述:多个线程访问同一资源对象,可能会造成资源对象数据混乱
解决:同步(锁)synchronized;
死锁:描述.当两个线程访问一对相互依赖的同步资源时,会出现死锁。
解决:wait——notify{代码:生产者、消费者}
效果:线程安全了,但效率低
在资源调用处加同步————同步块{synchronized(rs){rs.display2(threadName) }