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

网站流量一直下降/去了外包简历就毁了吗

网站流量一直下降,去了外包简历就毁了吗,加强网站信息内容建设,wordpress安装文件夹synchronized锁的什么资源前言声明一个加synchronized的类执行代码测试结论前言 我们都用过synchronized这个关键字,常见的使用方式是这样synchronized(资源){代码},这是显示的声明锁资源,很明显知道要竞争锁资源是什么。 我们也知道在两个不…

synchronized锁的什么资源

  • 前言
  • 声明一个加synchronized的类
  • 执行代码测试
  • 结论

前言

我们都用过synchronized这个关键字,常见的使用方式是这样synchronized(资源){代码},这是显示的声明锁资源,很明显知道要竞争锁资源是什么。
我们也知道在两个不同方法上架synchrinized关键字,这两个方法在不同线程中会互相等待,他们好像获取的是同一个资源,那这个锁资源是什么呢?是方法的引用obj::method?下面我们来验证一下

声明一个加synchronized的类

public class TestSynchronize {static Object get1 = new Object();public synchronized void get() {//		synchronized (this) {System.out.println(Thread.currentThread().getName()+"get得到锁"+this);try {TimeUnit.SECONDS.sleep(3);} catch (InterruptedException e) {// TODO Auto-generated catch blocke.printStackTrace();}
//		}}public synchronized void ge2t() {System.out.println(Thread.currentThread().getName()+"ge2t得到锁"+this);try {TimeUnit.SECONDS.sleep(3);} catch (InterruptedException e) {// TODO Auto-generated catch blocke.printStackTrace();}}public static synchronized void staticget() {System.out.println(Thread.currentThread().getName()+"staticget得到锁");try {TimeUnit.SECONDS.sleep(3);} catch (InterruptedException e) {// TODO Auto-generated catch blocke.printStackTrace();}}public static synchronized void staticge2t() {System.out.println(Thread.currentThread().getName()+"staticge2t得到锁");try {TimeUnit.SECONDS.sleep(3);} catch (InterruptedException e) {// TODO Auto-generated catch blocke.printStackTrace();}}}

执行代码测试

  1. 我们先看下非静态方法的情况
public static void main(String[] args) {TestSynchronize stu = new TestSynchronize();new Thread(()->{synchronized (stu) {System.out.println(Thread.currentThread().getName()+"获取锁"+stu+"\t"+System.currentTimeMillis());try {TimeUnit.SECONDS.sleep(5);} catch (InterruptedException e) {// TODO Auto-generated catch blocke.printStackTrace();}System.out.println(Thread.currentThread().getName()+"释放锁"+"\t"+System.currentTimeMillis());}},"a").start();;new Thread(()->{System.out.println(Thread.currentThread().getName()+"尝试"+"\t"+System.currentTimeMillis());stu.get();System.out.println(Thread.currentThread().getName()+"结束"+"\t"+System.currentTimeMillis());},"b").start();new Thread(()->{System.out.println(Thread.currentThread().getName()+"尝试"+"\t"+System.currentTimeMillis());stu.ge2t();System.out.println(Thread.currentThread().getName()+"结束"+"\t"+System.currentTimeMillis());},"c").start();}
a获取锁Test.Test.TestSynchronize@1d1ae28f	1635507748132
b尝试	1635507748133
c尝试	1635507748133
a释放锁	1635507753143
c\t ge2t得到锁Test.Test.TestSynchronize@1d1ae28f	1635507753143
c结束	1635507756155
b	 get得到锁Test.Test.TestSynchronize@1d1ae28f	1635507756155
b结束	1635507759166

我们看待a线程获取锁之后,b,c线程都在等待锁,c获取锁后b线程在等待锁

  1. 在看下静态方法上的synchronized
public static void main(String[] args) {new Thread(()->{synchronized (TestSynchronize.class) {System.out.println(Thread.currentThread().getName()+"获取锁"+TestSynchronize.class +"\t"+System.currentTimeMillis());try {TimeUnit.SECONDS.sleep(5);} catch (InterruptedException e) {// TODO Auto-generated catch blocke.printStackTrace();}System.out.println(Thread.currentThread().getName()+"释放锁"+"\t"+System.currentTimeMillis());}},"astatic").start();new Thread(()->{System.out.println(Thread.currentThread().getName()+"尝试"+"\t"+System.currentTimeMillis());TestSynchronize.staticget();System.out.println(Thread.currentThread().getName()+"结束"+"\t"+System.currentTimeMillis());},"estatic").start();new Thread(()->{System.out.println(Thread.currentThread().getName()+"尝试"+"\t"+System.currentTimeMillis());TestSynchronize.staticge2t();System.out.println(Thread.currentThread().getName()+"结束"+"\t"+System.currentTimeMillis());},"fstatic").start();}
astatic	获取锁class Test.Test.TestSynchronize	1635507551822
estatic	尝试 	1635507551822
fstatic	尝试	1635507551823
astatic	释放锁	1635507556825
fstatic\t staticge2t得到锁	1635507556825
fstatic	结束	1635507559834
estatic\t staticget得到锁	1635507559834
estatic	结束	1635507562843

我们可以看到astatic线程获取锁后,estatic fstatic两个线程中的静态方法都在等待锁,fstatic得到锁之后estatic 在等待fstatic释放锁。

结论

  1. 当在静态方法上加synchronized时,实际上锁的资源是class这个类等效代码是synchronized (TestSynchronize.class) ,所以两个静态方法都加synchronized关键字时竞争的是同一个锁资源。
  2. 当在普通方法上加锁时,实际上锁的是实体对象,也就是this,上面打印出来是TestSynchronize@1d1ae28f这个对象,所以两个普通方法竞争的也是同一个锁资源,也会互相等待。
http://www.lbrq.cn/news/1277335.html

相关文章:

  • 网站建设谈判技巧/推广网站都有哪些
  • 淮安市城市建设档案馆网站/完整的品牌推广方案
  • 厦门今天刚刚发生的新闻/seo推广怎么做视频教程
  • 花生壳做网站/免费舆情监测平台
  • 做网页设计网站有哪些/邯郸seo优化
  • 手机触屏网站开发/西安seo优化培训机构
  • 网站首页被k 不恢复/上往建站
  • 重新安wordpress网站/seo优化教程下载
  • 网站建设中的需求报告功能/推广app接单网
  • bootstrap建设淘宝网站/自己怎么做一个网页
  • 百度联盟做网站赚钱吗/图片百度搜索
  • 银川森林半岛/深圳seo优化服务商
  • 网站维护什么情况/周口搜索引擎优化
  • 外贸快车做网站怎么样/营销的三个基本概念是什么
  • 中央政府网站建设管理办法/怎么接游戏推广的业务
  • 猪八戒网怎么做网站/网络整合营销
  • 百度优化怎么做/seo视频
  • 网站建设技术方面/私人做网站的流程
  • 群辉怎么做视频网站/青岛快速排名优化
  • 建立网站的公司杭州/网站关键词优化教程
  • 360路由器做网站/哈尔滨推广优化公司
  • 无锡网站建设服务公司/互联网营销师是做什么的
  • 深圳哪里做网站/在线seo
  • 动易网站模板下载/百度网站
  • 昆明响应式网站/网站维护推广的方案
  • 建设集团招聘/百度sem优化师
  • 陕西电商b2c网站建设公司/sem工作内容
  • 上海自聊自做网站/谷歌浏览器安卓下载
  • google网站建设代理/网站推广的作用
  • 网站使用标题做路径/东莞市网站seo内容优化
  • 4.方法的使用
  • 记录Linux下ping外网失败的问题
  • 光伏气象监测系统:当阳光遇见科技
  • 并查集介绍及典型应用和编程题
  • DeepSeek MoE 技术解析:模型架构、通信优化与负载均衡
  • 系统学习算法:专题十五 哈希表