java实现多线成有两种方法,1.继承一个Thread类,复写run方法。2.实现runnable接口,复写run方法
继承:
class A extends Thread{
run(){
//daima
}
}
new A().start();//启动线程
缺点 :由于java 只能单继承,所以这个类不能在继承其他的类
接口:
class A implements Runnable{
run(){
//daima
}
}
A a = new A();
new Thread(a).start();
java 的线程周期 为 新建、就绪、运行、阻塞、死亡 每个过程都有一个触发条件。
new 线程后为新建,start()后为就绪,得到cpu资源为运行。阻塞和死亡的条件比较复杂,也有很多方法。
阻塞:可以通过 sleep 让线程进行休眠,一定时间后 线程从新进入就绪状态。yield 让线程让出资源从新进入就绪状态。notify 可以唤醒休眠的线程进入就绪状态。
当线程执行完就进入死亡状态。
通过setPriority方法可以设置线程的优先级,优先级高的可以优先得到资源。
多线程同步时 有些代码块的访问会出bug 比如:买票,有可能出现一张票买两次或多次的现象。解决办法就是添加同步代码块 synchronized 线程锁。 |
|