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

别人抄袭网站设计怎么办360房产网郑州官网

别人抄袭网站设计怎么办,360房产网郑州官网,台州网站制作系统,下载模板系列文章目录 文章目录 系列文章目录前言一、什么是锁竞争#xff1f;二、什么是类锁#xff1f;什么是实例对象锁#xff1f;三、给类对象加锁不是锁住了整个类四、总结 前言 java选手们应该都对锁不陌生#xff0c;加锁了就是为保证操作语句的原子性#xff0c;如果你是…系列文章目录 文章目录 系列文章目录前言一、什么是锁竞争二、什么是类锁什么是实例对象锁三、给类对象加锁不是锁住了整个类四、总结 前言 java选手们应该都对锁不陌生加锁了就是为保证操作语句的原子性如果你是刚学并发编程是否傻傻分不清楚对象锁和类锁呢别怕你看到了我的这篇文章就能帮你解决这个困惑~~ 一、什么是锁竞争 当我们使用synchronized个一个对象加上了锁多个线程尝试在自己的内存空间上拿到这个加了锁的对象时此时就会发生锁竞争在竞争的瞬间只有一个线程可以拿到这个加了锁的对象此时线程就是安全的。 举个例子 假设你寝室里的卫生间只有一个马桶某天晚上你室友们同时都想去上厕所那么你们就是要去抢这个厕所。 在这里你和你的室友就是线程 厕所里的马桶就是对象 厕所门上的锁就是synchronized 二、什么是类锁什么是实例对象锁 类锁就是对类的成员或者方法或者类对象加锁类锁本质就是对类对象加锁。 什么是类对象 类对象就是.class对象类对象详细的记录了程序员在定义这个类时全部的信息比如属性、方法等 你可以看到类对象是.class类对象来源与.class文件.class文件是由javac编译器根据.java源文件编译出来的你可以理解成源文件只有一份所以类对象也只有一份 类锁 给static修饰的属性或者方法或者直接在synchronized(类.class)都是在给类加锁 实例对象锁 给非static修饰的属性或者方法加锁 //给count加2000次 class A{static int count;//对静态方法加锁就是对类对象加锁static synchronized void fun1(){for (int i 0; i 10000; i) {count;}System.out.println(我是类方法count);}//对实例方法加锁就是对实例对象加锁synchronized void fun2(){for (int i 0; i 10000; i) {count;}System.out.println(我是实例方法count);} } 三、给类对象加锁不是锁住了整个类 是否线程安全就看两个线程是否是针尝试获取到同一个加了锁的对象。就算里给类对象加了锁也不是意味着一个线程拿到锁了其他线程只能阻塞等待如果其他线程本来就没有要去获取到这把类锁而是去获取到实例对象的锁那么这里就不存在多个线程竞争获取同一个对象竞争同一把锁。 看下面这段代码 //线程不安全t1和t2尝试获取的是两个不同的对象一个是类对象一个是实例对象获取的不是同一把锁不存在锁冲突 public class Test {public static void main(String[] args) throws InterruptedException {A a new A();//线程1获取到是static修饰的方法Thread t1 new Thread(()-{A.fun1();try {Thread.sleep(10000);} catch (InterruptedException e) {e.printStackTrace();}});//线程2获取到的是非static修饰的方法Thread t2 new Thread(()-{a.fun2();});t1.start();t2.start();t1.join();t2.join();}} class A{static int count;//对静态方法加锁就是对类对象加锁static synchronized void fun1(){for (int i 0; i 10000; i) {count;}System.out.println(我是类方法count);}//对实例方法加锁就是对实例对象加锁synchronized void fun2(){for (int i 0; i 10000; i) {count;}System.out.println(我是实例方法count);} } 线程不安全结果小于20000 下面两段代码多个线程就是在尝试获取同一锁 看下面这段代码 t1、t2尝试获取同一把锁实例对象锁 //t1和t2尝试获取到同一把锁 public class Test {public static void main(String[] args) throws InterruptedException {A a new A();//线程1获取到是非static修饰的方法Thread t1 new Thread(()-{ // A.fun1();a.fun2();});//线程2获取到的是非static修饰的方法Thread t2 new Thread(()-{a.fun2(); // A.fun1();});t1.start();t2.start();t1.join();t2.join();}} class A{static int count;//对静态方法加锁就是对类对象加锁static synchronized void fun1(){for (int i 0; i 10000; i) {count;}System.out.println(我是类方法count);}//对实例方法加锁就是对实例对象加锁synchronized void fun2(){for (int i 0; i 10000; i) {count;}System.out.println(我是实例方法count);} } 看下面一段代码 t1和t2尝试获取到同一把类锁 public class Test {public static void main(String[] args) throws InterruptedException {A a new A();//线程1获取到是static修饰的方法Thread t1 new Thread(()-{A.fun1(); // a.fun2();});//线程2获取到的是static修饰的方法Thread t2 new Thread(()-{ // a.fun2();A.fun1();});t1.start();t2.start();t1.join();t2.join();}} class A{static int count;//对静态方法加锁就是对类对象加锁static synchronized void fun1(){for (int i 0; i 10000; i) {count;}System.out.println(我是类方法count);}//对实例方法加锁就是对实例对象加锁synchronized void fun2(){for (int i 0; i 10000; i) {count;}System.out.println(我是实例方法count);} } 四、总结 多线安全是否安全和不单单只是看synchronized修饰的属性因为java里的任何对象都可以被synchronized修饰关键在于多个线程是否是尝试获取相同的锁对象如果是同一把锁就会发送锁冲突线程安全。否则就不存在锁冲突线程不安全。 所以不要被类锁和对象锁的名称给迷晕了就看多个线程是否是在获取同一把锁如果是同一个实例对象锁线程安全如果是同一个类对象锁线程安全如果是一个线程获取类锁一个线程获取实例对象锁不安全。
http://www.sczhlp.com/news/237647/

相关文章:

  • 国家住房和城乡建设部中国建造师网站官网手机网站建设公司推荐
  • 外汇交易平台网站建设云计算存储网站建设安全
  • 哪里有免费的网站推广服务中国建设银行网站-个人客
  • dw网站建设的数据库emlog建站教程
  • 网站开发搭建企业网站建设与管理
  • 大冶市规划建设局网站成都关键词
  • 建设网站需要从哪方面考虑自己做的网站出现iis7
  • 什么做网站赚钱视频网站建设策划书
  • 建设网站的初步需要wordpress 插件升级失败
  • 光电公司网站建设焊锡外发加工网
  • 建德网站seo怎么做付款下载网站
  • 网站专题页面开发网站建设基本要素
  • 装修设计公司网站排名IDC网站用什么软件建
  • 网站开发专员360推广登录平台
  • 网站 通管局 报备杭州网站案列
  • 阿里云网站怎么备案域名解析注册域名后网站建设
  • 学企业网站开发陕西住房城乡建设门户网站
  • 重庆微信开发网站建设贺贵江seo教程
  • 网站怎么投放广告滑县住房和城乡建设局网站
  • 东莞专业微网站建设微商分销平台
  • 苏南网站建设网络设计工作室
  • 通用知识手册
  • 写给26届文科大学应届生的秋招求职建议 - jobleap.cn助你找到满意的工作
  • 网站建设需要会什么软件有哪些网页设计与网站建设电话
  • 开发电子商务网站和开发新闻类网站什么异同为什么建行网站打不开
  • 株洲seo网站优化营销型企业网站有哪些
  • 网站排名套餐临海市住房与城乡建设规划局 网站
  • 营销团队找产品合作sem优化专员
  • 山西网站建设电话珠海网站建设 超凡科技
  • 和一起做网店类似的网站网站后缀是xyz指得是什么