Java多线程机制
线程优先级:1-10,默认5。
创建-就绪-运行-阻塞-结束。
多次starThraed会发生IllegalThreadStateException
创建方法:继承Thread(实现Runnable接口)或实现Runnable。
阻塞状态:
1、同步阻塞:
同步锁被其他线程占用,jvm会将目前线程放入锁池中等待。
2、等待阻塞:
执行wait方法,jvm会将目前线程出让cpu并放入等待池。
3、其他阻塞:
执行sleep,join方法,jvm会将目前线程置为阻塞状态。
Java锁:
1、锁方法:
同步非静态方法:public synchronized void method1(){}
锁this对象,this对象的其他所有同步方法都不能执行。
同步静态方法:public synchronized static void method1()
锁class对象,当前类的所有同步静态方法不能执行,但同步非静态方法和其他方法不受影响。
2、同步代码块:
同步this:synchronized(this){}
this被加锁,this其他同步代码块不能执行。
同步obj:synchronized(obj){}
obj被加锁,obj的其他同步代码块不能执行。
wait():释放锁,线程进入阻塞状态,需要等待唤醒(一般wait在同步代码块中,其他obj执行notify的时候虽然能立即唤醒(只是进入就绪状态),但是锁依然在其他线程中,所有其他线程在执行notify后直到结束方法才会释放锁)。
notify():可以随机唤醒其他一个线程。
notifyAll():遵循先等待先唤醒。唤醒所有wait状态线程。
线程联合:join
A线程在占用cpu运行时,可以调用join加入其他线程,此时A线程将中断执行,一直等到其他线程执行完后才会继续执行。
守护线程:thread.setDaemon(true);
默认非守护线程,即用户线程。程序中用户线程执行完毕时,无论守护线程是否正在是否执行完毕都会中断执行。