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

php网站开发门槛高吗网站开发 网站建设

php网站开发门槛高吗,网站开发 网站建设,轻博客网站开发,营销网站建设模板一、什么是Lock Lock是一个接口,通常所说的可重入锁是指Lock的一个实现子类ReentrantLock 二、Lock实现步骤#xff1a; ①创建锁对象Lock lock new ReentrantLock(); ②加锁lock.lock(); ③释放锁lock.unlock(); import java.util.concurrent.locks.Lock; import java.util…一、什么是Lock Lock是一个接口,通常所说的可重入锁是指Lock的一个实现子类ReentrantLock 二、Lock实现步骤  ①创建锁对象Lock lock new ReentrantLock(); ②加锁lock.lock(); ③释放锁lock.unlock(); import java.util.concurrent.locks.Lock; import java.util.concurrent.locks.ReentrantLock;/*** 手动锁可重入锁的基本使用*/ public class ThreadLock {public static void main(String[] args) {//1.创建锁对象Lock lock new ReentrantLock();//2.加锁操作lock.lock();try{//业务代码可能会非常复杂-可能会导致异常后面的代码就不执行了锁就无法释放当前线程会永久占用锁资源//所以要用try-catch-finally可以没有catchSystem.out.println(你好ReentrantLock.);} finally {//3.释放锁一定要放在finally中lock.unlock(); }} } ---注意事项 1.unlock()一定要放在finally里否则可能导致锁资源永久占用问题。 2.lock()要放到try外官方建议或try中的首行问题不大。 lock.lock(); try {} finally {lock.unlock() } try {lock.lock(); int n 1/0; } finally {lock.unlock() } ---这种不行 try {int n 1/0;lock.lock(); } finally {lock.unlock() } 原因有两个 如果放在 try ⾥⾯因为 try 代码中的异常导致加锁失败但还会执行 finally 释放锁的操作。 未加锁却释放锁肯定会报错。报错信息中unlock 异常会覆盖 try ⾥⾯的业务异常从而增加调式程序和修复程序的复杂度增加排查错误的难度。 三、Lock指定锁类型——公平锁和非公平锁 //1.创建锁对象 Lock lock new ReentrantLock(true); //公平锁 Lock lock new ReentrantLock(); //非公平锁 Lock lock new ReentrantLock(false); //非公平锁  使用公平锁比使用非公平锁要慢 四、面试必问 4.1synchronized VS LockReentrantLock 实现方式Synchronized是Java语言内置的关键字而Lock是一个Java接口。锁的获取和释放Synchronized是隐式获取和释放锁由Java虚拟机自动完成而Lock需要显式地调用lock()方法获取锁并且必须在finally块中调用unlock()方法来释放锁。可中断性在获取锁的过程中如果线程被中断synchronized会抛出InterruptedException异常并且自动释放锁而Lock则需要手动捕获InterruptedException异常并处理同时也支持非阻塞、可轮询以及定时获取锁的方式。公平性Synchronized不保证线程获取锁的公平性而Lock可以通过构造函数指定公平或非公平锁。锁状态Synchronized无法判断锁的状态而Lock可以通过tryLock()、isLocked()来判断锁的状态(线程是否可能取到锁、锁是否被占用等)。粒度Synchronized锁的粒度较粗只能锁住整个方法或代码块而Lock可以细粒度地控制锁的范围比如锁某个对象的部分属性。场景如果在简单的并发场景下推荐使用Synchronized而在需要更高级的锁控制时可以考虑使用Lock。 一般情况建议使用Synchronized,在JDK1.5之前Lock优于Synchronized但在JDK1.5之后对Synchronized进行了优化后面在性能方面基本与Lock一样且使用简单(有作者说Synchronized是亲生的JDK还是会一直优化他不会让Lock优于它)。 4.2 Synchronized原理  Synchronized是Java语言中最常用的同步机制之一它可以确保多个线程访问共享资源时的互斥性和可见性。Synchronized关键字的原理如下 Synchronized使用了内置锁也称为监视器锁来实现同步。每个Java对象都有一个内置锁当该对象作为锁被获取时其他试图获取该锁的线程会被阻塞直到该锁被释放。Synchronized的锁是与对象相关联的。当一个线程进入Synchronized代码块时它必须先获取该对象的锁才能执行代码否则就会被阻塞。当该线程退出Synchronized代码块时它会自动释放该对象的锁。Synchronized具有可重入性。如果当前线程已经获得了某个对象的锁那么它可以继续访问该对象的其他Synchronized代码块而不会被自己持有的锁所阻塞。Synchronized还具有volatile变量的读写语义。在使用Synchronized关键字时内存屏障会确保本地线程中修改过的变量值被刷新回主内存从而保证了多个线程之间对变量修改的可见性。 Synchronized通过使用内置锁、与对象关联的锁、可重入性以及内存屏障等机制来实现线程的同步和锁的管理以保证对共享资源的访问具有互斥性和可见性。 4.3 Lock原理 Lock是Java语言中的一种高级同步机制它提供了比Synchronized更加灵活和可扩展的同步特性。Lock机制的原理如下 Lock使用了对象的锁来实现同步。每个Lock对象都有一个锁当该锁被获取时其他试图获取该锁的线程会被阻塞直到该锁被释放。Lock的锁是与对象无关的。相比于Synchronized关键字Lock提供了更加灵活的方式来控制锁的获取和释放。例如它支持可中断的获取锁操作、超时获取锁操作等等。因此在需要手动控制锁的获取和释放时Lock是一个很好的选择。Lock还具有可重入性。如果当前线程已经获得了某个Lock对象的锁那么它可以继续访问该对象的其他Lock代码块而不会被自己持有的锁所阻塞。Lock使用了条件变量来实现线程的等待和通知。Condition接口提供了await()、signal()和signalAll()等方法用于线程之间的等待和通知从而避免了Object类中wait()和notify()方法可能出现的信号丢失问题。 Lock通过使用对象的锁、与对象无关的锁、可重入性以及条件变量等机制来实现线程的同步和锁的管理以保证对共享资源的访问具有互斥性和可见性。与Synchronized关键字相比Lock提供了更加灵活和可扩展的同步特性但也需要更多的代码来控制锁的获取和释放。 4.4、Synchronized与Lock使用 Synchronized public class Counter {private int count;public synchronized void increment() {count;}} Lock import java.util.concurrent.locks.Lock; import java.util.concurrent.locks.ReentrantLock;public class Counter {private int count;private Lock lock new ReentrantLock();public void increment() {lock.lock();try {count;} finally {lock.unlock();}} } 上述代码也是定义了一个计数器类Counter但是使用的是Lock接口来实现线程同步。在这种情况下需要先创建一个ReentrantLock对象然后在需要同步的代码块中调用lock()方法获取锁在finally块中调用unlock()方法释放锁。 总的来说Synchronized更加简单易用适合用于一些简单的并发场景而Lock提供了更多的灵活性和可扩展性适合用于一些复杂的并发场景。 4.5ReentrantLock为什么比Synchronized更灵活 ReentrantLock比Synchronized更灵活主要因为它提供了以下功能 可以指定公平锁或非公平锁。支持获取锁的超时时间。支持可中断的获取锁操作。可以通过tryLock()方法尝试获取锁如果锁已经被占用则返回false。支持多个Condition对象可以让线程在不同的条件下等待和唤醒。 4.6什么是锁自旋 锁自旋是一种优化锁竞争的技术它用于减少线程在获取锁时的等待时间。当一个线程请求获取某个对象的锁时如果此时锁已经被其他线程占用那么该线程会进入阻塞状态等待锁的释放。而使用锁自旋技术线程在发现锁被其他线程占用时并不会立即进入阻塞状态而是执行一段循环代码称为自旋等待锁的持有者释放锁。 原文链接https://zhuanlan.zhihu.com/p/622760822
http://www.hkea.cn/news/14485895/

相关文章:

  • 湖南平台网站建设推荐网站设计外包合同
  • 网页制作模板素材库织梦做的网站好优化
  • 网页制作与网站开发...网站网页设计在哪找
  • 标识标牌网站怎么做中国设计网址
  • 山东省住房与建设厅网站百度网盘搜索引擎入口
  • 线上网站开发相关书籍word模板免费下载网站
  • 官网和网站的区别wordpress 边栏修改
  • 重庆市建设局网站制作h5的基本流程
  • 长沙做网站推广哪家好搜索量用什么工具查询
  • 济南做网站建设的公司建立无上气运皇朝
  • 在网站建设中经历的流程给网站栏目页做反链好吗
  • 开发一个网站要多久微信朋友圈产品推广语
  • 沈阳网站推广的公司广州seo和网络推广
  • 金融品牌网站设计运动网页设计
  • 电影网站开发任务书网站主域名
  • 河北建设局网站首页我要建企业营销型网站
  • 网站建设图标合集国家开发投资集团
  • 找哪些公司做网站wordpress 建站很简单
  • 一家专门做动漫的网站宁波网页网站制作
  • 网站建设的可行性分析报告手机优化网站建设
  • 创建网站需要哪些工作深圳国外网站制作公司
  • 公司网络营销模板网站可以做seo吗
  • 企业网站做seo的必要性可以浏览的外文网站
  • 文章响应式网站做网站需要哪些手续
  • 10个国内建筑网站长沙品牌网站制作服务报价
  • 怎么创建自己的公司网站模板出售网站源码
  • 高端的咨询行业网站策划做网站项目后台的
  • 网站营销管理培训班深圳小程序建设公司
  • 微信企业微网站wordpress图床首页无缩略图
  • 思帽网站建设找人制作网站 优帮云