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

专为网站做点击量文化建设素材

专为网站做点击量,文化建设素材,手机有软件做ppt下载网站有哪些,ui设计公司有哪些华为面试官问了其中一个问题 Q: synchronize(this) 和 synchronize(class)一样么#xff1f; 是否可以用synchronize(this) 来锁 A: 当使用 synchronized 加锁 class 时#xff0c;无论共享一个对象还是创建多个对象#xff0c;它们用的都是同一把锁#xff0c;而使用 sync…华为面试官问了其中一个问题 Q: synchronize(this) 和 synchronize(class)一样么 是否可以用synchronize(this) 来锁 A: 当使用 synchronized 加锁 class 时无论共享一个对象还是创建多个对象它们用的都是同一把锁而使用 synchronized 加锁 this 时只有同一个对象会使用同一把锁不同对象之间的锁是不同的。 synchronized 用法 synchronized 可以用来修饰普通方法、静态方法和代码块。 ​ 修饰普通方法 /*** synchronized 修饰普通方法*/ public synchronized void method() {// ....... } 当 synchronized 修饰普通方法时被修饰的方法被称为同步方法其作用范围是整个方法作用的对象是调用这个方法的对象。 ​ 2. 修饰静态方法 /*** synchronized 修饰静态方法*/ public static synchronized void staticMethod() {// ....... } 当 synchronized 修饰静态的方法时其作用的范围是整个方法作用对象是调用这个类的所有对象。 修饰代码块 为了减少锁的粒度我们可以选择在一个方法中的某个部分使用 synchronized 来修饰一段代码块从而实现对一个方法中的部分代码进行加锁实现代码如下 public void classMethod() throws InterruptedException {// 前置代码...// 加锁代码synchronized (SynchronizedExample.class) {// ......}// 后置代码... } 以上代码在执行时被修饰的代码块称为同步语句块其作用范围是大括号“{}”括起来的代码块作用的对象是调用这个代码块的对象。 但以上代码除了可以加锁 class 之外还可以加锁 this具体示例如下 public void classMethod() throws InterruptedException {// 前置处理代码...synchronized (this) {// ......}// 后置处理代码... } 那问题来了使用 synchronized 加锁 this 和 class 的区别是什么不都是加锁同一个类吗 ​ 答案还真不是加锁 this 和 class 区别还是很大的。下面我们通过以下 4 个示例来看二者之间的区别。 区别 加锁 class 共享一个类实例 首先我们创建 5 个线程调用同一个对象下 synchronized 加锁的 class 代码具体示例如下 import java.util.Date; import java.util.concurrent.TimeUnit;public class SynchronizedExample {public static void main(String[] args) {// 创建当前类实例final SynchronizedExample example new SynchronizedExample();// 创建 5 个线程执行任务for (int i 0; i 5; i) {new Thread(new Runnable() {Overridepublic void run() {try {// 调用 synchronized 修饰的 class 方法example.classMethod();} catch (InterruptedException e) {e.printStackTrace();}}}).start();}}/*** synchronized 修饰的 class 方法* throws InterruptedException*/public void classMethod() throws InterruptedException {synchronized (SynchronizedExample.class) {System.out.println(String.format(当前执行线程:%s,执行时间:%s,Thread.currentThread().getName(), new Date()));TimeUnit.SECONDS.sleep(1);}} } 从上述结果可以看出这 5 个线程共享的是同一把锁。 加锁 class 创建多个实例 接下来我们创建 5 个线程调用不同对象下 synchronized 加锁的 class 代码具体示例如下 import java.util.Date; import java.util.concurrent.TimeUnit;public class SynchronizedExample {public static void main(String[] args) {// 创建 5 个线程执行任务for (int i 0; i 5; i) {new Thread(new Runnable() {Overridepublic void run() {try {// 创建类实例SynchronizedExample example new SynchronizedExample();// 调用 synchronized 修饰的 class 方法example.classMethod();} catch (InterruptedException e) {e.printStackTrace();}}}).start();}}/*** synchronized 修饰的 class 方法* throws InterruptedException*/public void classMethod() throws InterruptedException {synchronized (SynchronizedExample.class) {System.out.println(String.format(当前执行线程:%s,执行时间:%s,Thread.currentThread().getName(), new Date()));TimeUnit.SECONDS.sleep(1);}} } 从上述结果可以看出虽然是不同的对象但它们使用的仍然是同一把锁。 3. 加锁 this 共享一个类实例 接下来我们创建 5 个线程调用 synchronized 加锁 this 的示例。首先我们这 5 个线程调用同一个对象的加锁方法示例代码如下 import java.util.Date; import java.util.concurrent.TimeUnit;public class SynchronizedExample {public static void main(String[] args) {// 创建当前类实例final SynchronizedExample example new SynchronizedExample();// 创建 5 个线程执行任务for (int i 0; i 5; i) {new Thread(new Runnable() {Overridepublic void run() {try {// 调用 synchronized 修饰的 this 方法example.thisMethod();} catch (InterruptedException e) {e.printStackTrace();}}}).start();}}/*** synchronized 修饰的 this 方法* throws InterruptedException*/public void thisMethod() throws InterruptedException {synchronized (this) {System.out.println(String.format(当前执行线程:%s,执行时间:%s,Thread.currentThread().getName(), new Date()));TimeUnit.SECONDS.sleep(1);}} } 从上述结果可以看出以上线程使用的都是同一把锁。 4. 加锁 this 创建多个类实例 最后一个示例最为特殊我们使用 synchronized 加锁 this让这 5 个线程调用各自创建对象的方法具体示例如下 import java.util.Date; import java.util.concurrent.TimeUnit;public class SynchronizedExample {public static void main(String[] args) {// 创建 5 个线程执行任务for (int i 0; i 5; i) {new Thread(new Runnable() {Overridepublic void run() {try {// 创建多个类实例SynchronizedExample example new SynchronizedExample();// 调用 synchronized 修饰的 this 方法example.thisMethod();} catch (InterruptedException e) {e.printStackTrace();}}}).start();}}/*** synchronized 修饰的 this 方法* throws InterruptedException*/public void thisMethod() throws InterruptedException {synchronized (this) {System.out.println(String.format(当前执行线程:%s,执行时间:%s,Thread.currentThread().getName(), new Date()));TimeUnit.SECONDS.sleep(1);}} } 从上述结果可以看出当使用 synchronized 加锁 this 时如果线程调用的不是同一个对象那么这些线程之间使用的锁都是自己独立的锁这个结果就和 synchronized 加锁 class 的结果完全不同了。
http://www.huolong8.cn/news/438056/

相关文章:

  • 网站空间 按流量计费马云不会代码怎么做的网站
  • 百度新网站提交入口青岛关键词快速排名
  • 游戏 网站 模板中国企业公示信息网官网
  • 岚县网站建设济南的企业网站
  • 网站做md5脚本微信网站入口
  • 网站名称填写什么wordpress下拉筛选
  • 做网站包含微信公众号吗网页源码在线查看
  • 做图片视频的网站有哪些问题吗免费制作网站平台
  • 国外著名的网站设计公司wordpress防止发表重复标题的文章
  • 北京怎么样做网站二级域名网站建设
  • 手机能建设网站开发网站年度工作总结及明年工作计划
  • 上海网站建设,分类广告wordpress 不能换主题
  • app设计思路网深圳网站优化
  • 福安做网站最好网站建设与管理 孙伟
  • 现在做网站公司网站架构技术
  • 医院网站建设的特点触屏版网站开发样式
  • 教育培训类网站建设免费咨询心理问题
  • 成都私人做公司网站的wordpress上传数据库
  • 网站使用支付接口如何收费网站建设与管理课程项目
  • 怎样做才能提升自己的网站网站打开速度慢wordpress
  • 深圳的网站建设公司的外文名是做网站记什么科目
  • 大连金豆网站建设建设部资质网站查询
  • 云南省工程建设造价协会网站用wordpress仿一个网站模板下载
  • 电子商务网站建设与管理的背景文创产品设计案例及理念
  • 宁波专业制作网站wordpress数据库cpu太高
  • 花生壳动态域名做网站如何做jquery音乐网站
  • 查询网站whois我想创建一个网站自己玩玩
  • 深圳网站建设 工作室wordpress themepath
  • 淮南城乡建设局网站视频模板在线制作网站
  • 网站焦点图如何美观中建八局第三建设有限公司网站