当前位置: 首页 > news >正文

嘉兴公司的网站设计网站不备案会怎...

嘉兴公司的网站设计,网站不备案会怎...,做质量计量的网站有哪些,东莞知名企业53. 什么是 Java 中的死锁#xff1f;如何避免#xff1f; Java中的死锁是指两个或两个以上的线程因为竞争资源而造成的一种僵持状态#xff0c;每个线程都在等待其他线程释放锁#xff0c;但是这些锁又被其他线程持有#xff0c;导致没有任何线程能继续执行下去#xf…53. 什么是 Java 中的死锁如何避免 Java中的死锁是指两个或两个以上的线程因为竞争资源而造成的一种僵持状态每个线程都在等待其他线程释放锁但是这些锁又被其他线程持有导致没有任何线程能继续执行下去形成一种循环等待的局面。 死锁通常发生在以下四个条件同时满足时 互斥条件资源不能被多个线程共同使用只能由一个线程独占。占有且等待条件线程至少持有一个资源并且正在等待获取额外的资源而该资源又被其他线程持有。非抢占条件线程持有的资源在未使用完毕前不能被其他线程强行抢占。循环等待条件存在一个线程与资源之间的循环等待链每个线程都在等待下一个线程所持有的资源。 避免死锁的策略包括 破坏死锁的四个必要条件之一 互斥条件无法破坏因为它是资源使用的必要条件。通过一次性请求所有需要的资源来破坏占有且等待条件。允许线程剥夺已占有的资源破坏非抢占条件。通过资源的有序分配来破坏循环等待条件比如对所有资源进行编号线程按编号顺序请求资源。 避免策略 设计合理的资源申请顺序保证所有线程按照相同的顺序请求资源。减少资源的占有时间尽快释放不再需要的资源。使用锁排序确保所有线程都按照固定的全局顺序获取锁。 检测与恢复 通过资源分配图或者银行家算法来检测死锁一旦检测到死锁采取措施解除。通过线程回滚或者资源抢占来回滚到没有死锁的状态。 避免长时间锁 使用尝试获取锁的机制如 tryLock() 方法如果不能立即获取锁则放弃。对锁进行超时处理超时后自动放弃锁减少资源占用时间。 以下是一个简单的死锁示例 public class DeadlockDemo {public static void main(String[] args) {final Object resource1 Resource1;final Object resource2 Resource2;Thread t1 new Thread(() - {synchronized (resource1) {System.out.println(Thread 1: Locked resource 1);try {Thread.sleep(100);} catch (InterruptedException e) {e.printStackTrace();}synchronized (resource2) {System.out.println(Thread 1: Locked resource 2);}}});Thread t2 new Thread(() - {synchronized (resource2) {System.out.println(Thread 2: Locked resource 2);try {Thread.sleep(100);} catch (InterruptedException e) {e.printStackTrace();}synchronized (resource1) {System.out.println(Thread 2: Locked resource 1);}}});t1.start();t2.start();} }在上面的代码中如果两个线程同时执行并且分别获得了不同的锁然后试图获取对方持有的锁就可能导致死锁的发生。通过上述避免策略我们可以重新设计代码以避免这种潜在的问题。 54. synchronized 和 volatile 关键字有何区别 synchronized和volatile是Java中的两个关键字它们被用于控制多线程访问共享资源时的同步问题。 作用域不同 synchronized可以修饰方法或代码块它可以保证在同一时刻只有一个线程可以执行某个方法或代码块。volatile只能用来修饰变量确保对变量的读写操作对所有线程立即可见。 内存语义 使用synchronized时当线程进入同步代码块或方法它会清空工作内存中的共享变量值从主内存中重新读取。当线程退出同步代码块或方法时它会将工作内存中的共享变量的最新值刷新回主内存。volatile变量则是直接从主内存读取对它的写操作也会直接写入主内存保证了新值对其他线程的可见性。 操作粒度 synchronized的操作粒度比较粗它锁定的是整个方法或代码块在锁定期间其他线程无法访问同步资源。volatile的操作粒度比较细仅保证对单个变量的读写操作的可见性和有序性。 锁的影响 synchronized可以给方法或代码块加锁导致线程在执行时会阻塞等待锁的释放。volatile不会造成线程的阻塞。 有序性 synchronized保证了操作的有序性即进入同步代码块或方法的操作将在退出同步代码块或方法之前全部执行完毕。volatile通过禁止指令重排优化也保证了操作的有序性。 以下是一个使用synchronized和volatile的示例 public class Counter {// 使用volatile修饰共享变量private volatile int count 0;// 使用synchronized修饰方法public synchronized void increment() {count; // 这里隐式地使用了count变量}public int getCount() {return count; // 这里读取volatile变量} }在这个示例中increment方法使用了synchronized确保了在执行count操作时其他线程不能同时访问该方法。而变量count被声明为volatile保证了count值的变化对其他线程是可见的。 总结来说synchronized用于控制多线程访问资源的同步关注的是操作的原子性和线程的互斥而volatile关注的是变量访问的可见性和有序性但不保证复合操作的原子性。 领【150 道精选 Java 高频面试题】请go公众号码路向前 。
http://www.zqtcl.cn/news/35374/

相关文章:

  • 怎么制作钓鱼网站链接建设网站的相关技术指标
  • 模板手机网站建设公司排名如何制作手机免费网站模板下载
  • 广告网站定制企业网站只做英文
  • 网站关键字怎么做在线做原型的网站
  • 静态动漫网站模板企业网站的缺点
  • 个人网站开发工具品牌建设有待加强
  • 没有网站怎么做推广me域名公司网站
  • 扬州市住房和建设局网站网站 权限
  • 北京微信网站搭建多少钱工具网站有哪些
  • 做ppt的网站网站建站销售提成
  • 网站做好后怎么做seo广告推广策划方案
  • php网站建设案例教程视频专门做顶账房的网站
  • 网站主机服务器郴州网站优化
  • 李宁运动服网站建设规划书网站建设秋实
  • 聊城做网站推广网站推广优化网址
  • 网站开发树形图外网建筑设计网站
  • 秦皇岛做网站的公司宏杰zkeys网站模板
  • 做一个网站要注意什么哈尔滨公共资源交易网建设工程
  • 做网站别名解析的目的是什么wordpress管理后台添加导航栏
  • 北京网站设计与建设vue登录页面模板
  • 彩票开奖网站建设做一个网站的成本
  • 最新自助建站源码佛山市禅城网站建设
  • 网站建设一般需要多少钱seo在网站建设中的作用
  • 网站开发的前台开发工具灞桥微网站建设
  • 我的个人网站 的网页设计wordpress耗带宽吗
  • 网站怎样设计网址大全网络营销公司加盟
  • 广安发展建设集团官方网站尚硅谷培训机构官网
  • 广州网站建设网站定制wordpress 询价按钮
  • 怎么做网站生意百度竞价网站
  • 网站建设与管理做什么济南网站建设外包公司