并发
活跃性问题:
1、死锁:线程A,B各种拥有一个加锁的资源,同时争抢对方的资源。
2、饥饿:某些线程得不到运行。(线程优先级)
3、活锁:线程A,B相让,都不去执行。
饥饿产生的情况:
1、线程优先级。(需要考虑系统的差异性)
2、线程A,B执行同一个同步块;线程A阻塞,线程B在等待A释放锁。
3、线程永远不被唤醒。
避免饥饿问题:
1、设置合理的优先级。
2、使用Lock来进行同步。
出现多线程问题:
1、多线程环境
2、多个线程争抢同一个资源。
3、对争抢的资源进行非原子操作。
synchronized 内置锁:
jvm字节码层面:
monitorenter //字节码加锁
synchronized(){}
monitorexit //字节码释放锁