公益网站建设,网站开发软件系统,wordpress电影站群,陵水网站建设哪家专业线程安全性问题
多线程环境下 多个线程共享一个资源对资源进行非原子性操作。
以上三者都存在就会发生线程安全性问题
如文中的卖火车票问题#xff1a;http://blog.csdn.net/zengmingen/article/details/53217229
原因是#xff1a;一行java代码转成.class字节码文件后是…线程安全性问题
多线程环境下 多个线程共享一个资源对资源进行非原子性操作。
以上三者都存在就会发生线程安全性问题
如文中的卖火车票问题http://blog.csdn.net/zengmingen/article/details/53217229
原因是一行java代码转成.class字节码文件后是多行的程序在执行的时候行字节码文件里一行行执行。
当多个线程A线程执行到100行cpu时间片用完了保留现场cpu去了服务B线程了。
B线程执行也执行到了100行cpu时间片用完了保留现场cpu去了服务C线程了。
下一轮时间片的时候可能A,B的取值是一样的。 活跃性问题
死锁 经典的哲学家吃饭问题
5个哲学家坐一起边讨论哲学边吃饭但是每个哲学家只有一只筷子吃饭时需要问旁边的人借一只筷子。
正常是一开始讨论哲学要吃的哲学家问旁边的借一下筷子。
异常是5位哲学家都停下讨论一起吃饭谁也不借筷子全饿死了。
都有资源都不释放导致无资源可用死锁
java自带的jconsole可以检测死锁 饥饿
餐厅就餐问题餐厅卖饭窗口只有一个。一群没素质的人不排队硬挤买到饭了也不走结果后面挤不进去的饿死了。
在线程里是优先级问题优先级没搞好。
高优先级吞噬所有低优先级的CPU时间片 线程被永久堵塞在一个等待进入同步块的状态 等待的线程永远不被唤醒 如何尽量避免饥饿问题 设置合理的优先级 使用锁来代替synchronized
活锁 活锁其实和锁没有必然关系。活锁就像小猫追着自己的尾巴咬虽然它一直在咬却一直没有咬到活锁就是指线程一直处于运行RUNNABLE状态但却是在做无用功而这个线程本身要完成的任务却一直无法进展。活锁的一个典型例子是某些重试机制实现地有问题导致一个交易请求被不断地重试而每次重试都是失败的线程在最无用功这就导致其他失败的交易无法得到重试的机会任务无法进展。性能问题
cpu分配给各线程的时间叫做时间片。这个时间片的时间是非常短的。
cpu在时间片完成后cpu在切换到下一个线程之前需要做一些工作如保留现场。这个比较消耗cpu资源。