Java多线程:
多个线程之间是轮流使用cpu。
使用Thread类及其子类的对象来表示线程
线程需要四种状态:
1.新建:
生命Thread及其子类的对象,分配内存空间和其他资源
2.运行:
多个线程轮流使用CPU资源进行数据处理
3.中断
由于资源被强占,或者执行了sleep及wait方法,处理临时中断
4.死亡:
run结束或者被强制结束,死亡也就等于线程释放了实体
优先级:
Java进程默认优先级为1~10 十个等级,在没有指定的情况下, 默认为5;使用setPriority(int grade)来设定。不过Java调度器的任务是是高优先级的县城能够始终执行。
要编写正确,跨平台的多线程代码,必须假设县城在任何时候都有可能被剥夺资源使用权
Thread子类创建线程:
定义类继承Thread,重写Thread中的run()方法,规定线程的具体操作。
这样可以在子类中直接增加新的成员变量。但是Thread的子类不可在扩展其他的类
calss 类名 extends Thread(){
void 类名(){
构造方法
}
public void run(){
……
}
}
Runnable接口与目标对象
定义进程类直接使用Thread(Runnable t)来定义。其中括号中的为接口,在调用Run()方法时间,直接使用的是接口中的run()方法(接口回调)
Thread vx = new Thread(xyz);
class xyz Implements Runnable{
public void run(){
……
}
}
线程常用方法:
start() 启动线程,使之进入就绪队列
run() 被调度之后的具体作业
sleep() 休眠,放弃已占用资源,如果被打断,jvm抛出异常
(InterruptedException)使用try~catch调用sleep
isAlive() 在线程的run执行开始到死亡结束,使用该方法返回真
currentThread() 方法返回正在使用CPU资源的线程
interrupt() 唤醒,相对于sleep方法。导致线程发生异常
线程同步:
对于若干个线程调用一个方法时间,必须遵循同步机制:一个线程在使用该方法时间,其他线程先试用该方法就必须等待.
使用synchronized()来修饰方法
在线程运行中可能出现,该线程没有执行完,就被强行终止.不过可以使用同步避免该情况出现
wait(),notifyAll(),notify()都是final修饰的方法,不可被继承或者重写