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

如何用模板做公司网站公司个人怎么做网络推广

如何用模板做公司网站,公司个人怎么做网络推广,秦皇岛网站优化,做刷网站流量犯法吗裁员在家,没有面试机会,整理整理面试知识点吧! 不得不知道的java 锁 Java 中,提供了两种方式来实现同步互斥访问(也就是锁):synchronized 和 Lock 多线程编程中,有可能会出现多个线…

裁员在家,没有面试机会,整理整理面试知识点吧!

不得不知道的java 锁

Java 中,提供了两种方式来实现同步互斥访问(也就是锁):synchronized 和 Lock

多线程编程中,有可能会出现多个线程同时访问同一个共享、可变资源的情况,这个资源我们称之其为临界资源;

这种资源可能是: 对象、变量、文件等。
共享:资源可以由多个线程同时访问
可变:资源可以在其生命周期内被修改
当多个线程执行一个方法时,该方法内部的局部变量并不是临界资源,因为这些局部变量是在每个线程的 ,私有栈中,因此不具有共享性,不会导致线程安全问题。
synchronized
jvm 内置的锁,可以对临界资源同步访问,是可重入的。
实例方法加锁:锁的是当前对象。同一个线程

静态方法加锁:锁的是当前类对象

静态代码块:锁的是代码块里的对象

synchronized底层原理
synchronized 是基于JVM 的内置锁,底层通过通过内部Monitor(监视器锁)实现,监视器锁的实现依赖底层操作系统的Mutex lock(互斥锁)实现,它是一个重量级锁性能较低。jdk1.5 以后哦哦进行了优化。偏向锁,轻量级锁(自适应自旋锁),重量级锁。使得synchronized 性能跟Lock 差不多。 
synchronized关键字被编译成字节码后会被翻译成 monitorenter monitorexit 两条指令分别在同步块逻辑代码的起始位置
与结束位置。
对象结构
一个对象包括:对象头,对象数据,对其填充
对象头包括:
      markworld :用于存储对象自身运行时数据,比如hashcode,GC分代年龄,锁状态标志,线程持有的锁,线程偏向ID,偏向时间戳等,
      klass : 对象指向它的类元数据指针,虚拟机通过这个指针确定这个对象是哪个类的实例
      数组长度(数组才有)
synchronized 锁升级过程
1 首先一个线程t1请求加锁资源,此时对象头里线程偏向id 存储当前线程的线程id,并且锁的状态标志位加锁。现在是一个偏向锁
2 当再有第二个线程t2过来尝试加锁,发现已经被加锁了,检查加锁的是否是自己,不是t2 则尝试修改对象头偏向id 为自己,修改失败,当t1 运行到安全点时,判断是否t1 已经退出代码块,如果是则t1 释放锁,t2 添加偏向锁,如果t1没有执行完,则升级为轻量级锁
3 轻量级锁,t2 会通过CAS 方式自旋尝试加锁,超过多少次没有获取到锁,则升级成重量级锁,因为自旋获取锁,也是比较费CPU 资源的

锁粗话 StringBubber .append 线程安全,多次append 就会进行一个锁 锁粗话

锁清除 synchronized (new object()) ,因为每次都是锁新对象,jvm 认为没有意思 所以不会加锁 

逃逸分析:如果一个对象只有在一个线程栈中用到,没有其他线程用到,这样这个对象就会在一部分会在栈中不放到堆里。

ReentrantLock 时基于AQS 实现的同步手段,跟synchronized 也是一种互斥锁。保证线程安全。但是它又比synchronized 多了很多特性,比如:公平锁,中断锁,锁超时等等。
ReentrantLock 原理
1 通过cas 方式 设置变量,expect–期望值  update–新值,如果期望值跟内存值相等,修改内存值为新的值。当前线程设置独占访问
 unsafe.compareAndSwapInt(this, stateOffset, expect, update);
setExclusiveOwnerThread(Thread.currentThread()); 

2 如果期望值跟内存之不相等,则获取共享变量判断是否等0 如果等于,则说明没有加锁,通过cas 继续加锁,如果不能与获取设置的线程,跟当前线程比对是否相等,如果相等则说明相同线程加锁,可以继续加锁,重入锁。

3 如果既不能加锁,也不是重入锁。则把当前线程放入队列里

核心思想:就是线程请求一个共享资源,如果共享资源空闲,这对共享资源加锁,如果共享资源已经加锁,则进入阻塞状态以及被唤醒时分配机制。通过CLH队列(虚拟双向队列)实现锁的,既获得不到锁的加入到队列中。

用大白话来说,AQS就是基于CLH队列,用volatile修饰共享变量state,线程通过CAS去改变状态符,成功则获取锁成功,失败则进入等待队列,等待被唤醒。

ReentrantLock lock = new ReentrantLock(false);//false为非公平锁
lock.lock();
lock.tryLock(30, TimeUnit.SECONDS);// 30秒没加上锁,自动释放
lock.lockInterruptibly();// 锁中断

 Condition condition = lock.newCondition();  //lock 等待通知
 condition.await();
 condition.signal();

 可以替换 synchronized  wait notify  

 obj.wait(); obj.notify(); 在synchronized 里否则报错

死锁:a线程锁定一个资源,同时想获取b线程的资源,b线程锁定一个资源,同时想获取a线程的资源。

java 死锁必要条件
1 互斥条件:资源不能被共享,只能由一个线程使用(threadLocal)  
2 请求保持条件:一个线程因请求其他资源而阻塞时,对目前拥有的资源保持不放。(一次性请求所有资源)

3 不可抢占条件:进程已获得的资源,在未使用完之前,不能被剥夺( 超时500毫秒 ,自动释放锁)  lock.tryLock(timeout)。
4 相互等待条件:t1 修改下单状态,减库存,  t2减库存,下单  相互持有对方的锁 等待,死锁(逻辑顺序一致) 

只要打破上面任意一个条件,即不会死锁

什么情况下会释放synchronized

执行完成会释放锁

抛异常会释放锁

wait 释放当前锁

return 释放锁

http://www.hkea.cn/news/986712/

相关文章:

  • 番禺建设网站服务软文写作网站
  • 有哪些专做自然风景图片的网站石首seo排名
  • 移动网站虚拟主机seo 排名 优化
  • 专业网站建设课程网站推广优化方式
  • 适合站长做的网站信息流广告投放工作内容
  • 做健身网站步骤网站建设网络公司
  • 武汉整站seo数据上云网站关键词优化怎么做的
  • 网站尾部网络seo推广
  • 建设一个公司网站需要什么知识网站网络推广优化
  • 政府高度重视网站建设怎么做网络推广
  • 自己做的网站是怎么赚钱免费ip地址网站
  • 郑州市政府网站集约化建设计划企业seo排名外包
  • 什么网站可以免费做护师题企业网站管理系统源码
  • 青岛专业餐饮网站制作国内搜索引擎排行榜
  • 域名有哪些seo站长之家
  • 建设网站有哪些关键词制作软件
  • 视频网站怎么制作网店推广的作用是什么
  • 网站栏目怎么做单独的搜索框云南疫情最新消息
  • 独立商城b2c电商网站开发合肥百度seo代理
  • 做购物网站需不需要交税费郑州网站托管
  • 是不是做网站就能赚钱谷歌seo关键词优化
  • 萝岗门户网站建设今日重大新闻头条财经
  • 个人相册网站模板怎么把网站排名排上去
  • 建设外贸网站案例统计站老站长推荐草莓
  • 1688网站的特点全网营销系统
  • 西安做网站企业网址怎么申请
  • 专业网站建设品牌百度指数里的资讯指数是什么
  • 做网站规避什么网站制作
  • 网站开发工作方案2022拉人头最暴利的app
  • 网站建设好还是阿里巴巴好磁力猫torrent kitty