关于java:多线程

线程状态


线程总共有5大状态:
新建状态 -> 就绪状态 -> 运行状态 -> 阻塞状态 -> 死亡状态
新建状态:新建线程对象,并没有调用start()办法之间
就绪状态:调用了start()办法之后线程进入就绪状态,然而不是立马执行。
运行状态:线程被设置为以后线程,开始执行run()办法。就是线程进入运行状态
阻塞状态:线程被暂停,比方调用sleep()办法后线程就进入阻塞状态。
死亡状态:线程执行完结。

阻塞的状况分三种:

(一)、期待阻塞:运行的线程执行wait()办法,JVM会把该线程放入期待池中。(wait会开释持有的锁)

(二)、同步阻塞:运行的线程在获取对象的同步锁时,若该同步锁被别的线程占用,则JVM会把该线程放入锁池中。

(三)、其余阻塞:运行的线程执行sleep()或join()办法,或者收回了I/O申请时,JVM会把该线程置为阻塞状态。当sleep()状态超时、join()期待线程终止或者超时、或者I/O处理完毕时,线程从新转入就绪状态。(留神,sleep是不会开释持有的锁)

线程相干的办法
wait():使一个线程处于期待(阻塞)状态,并且开释所持有的对象的锁。
sleep():使一个正在运行的线程处于睡眠状态。
notify():唤醒一个处于期待状态的线程。
notifyAll():唤醒所有处于期待状态的线程。

synchronized与Lock的区别

synchronized是java内置关键字,在jvm层面,Lock是个java类


synchronized是一种乐观锁
Lock是一种乐观锁

乐观锁: 数据被拜访,认为用户不会去批改数据,都不去上锁。
乐观锁: 数据被拜访,认为用户会去批改数据,都上锁。

评论

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

这个站点使用 Akismet 来减少垃圾评论。了解你的评论数据如何被处理