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

网站基础设施建设服装行业网站建设

网站基础设施建设,服装行业网站建设,店铺在百度免费定位,简单的静态网站作者 | 王磊来源 | Java中文社群#xff08;ID#xff1a;javacn666#xff09;转载请联系授权#xff08;微信ID#xff1a;GG_Stone#xff09;synchronized 是 Java 语言中处理并发问题的一种常用手段#xff0c;它也被我们亲切的称之为“Java 内置锁”#xff0c;由… 作者 | 王磊来源 | Java中文社群IDjavacn666转载请联系授权微信IDGG_Stonesynchronized 是 Java 语言中处理并发问题的一种常用手段它也被我们亲切的称之为“Java 内置锁”由此可见其地位之高。然而 synchronized 却有着多种用法当它修饰不同对象时其意义也是不同的下面我们一起来看。synchronized 用法synchronized 可以用来修饰普通方法、静态方法和代码块。① 修饰普通方法/*** synchronized 修饰普通方法*/ public synchronized void method() {// ....... } 当 synchronized 修饰普通方法时被修饰的方法被称为同步方法其作用范围是整个方法作用的对象是调用这个方法的对象。② 修饰静态方法/*** 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 个示例来看二者之间的区别。1.加锁 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 个线程共享的是同一把锁。2.加锁 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 的结果完全不同了。总结通过以上 4 个示例我们可以得出结论当使用 synchronized 加锁 class 时无论共享一个对象还是创建多个对象它们用的都是同一把锁而使用 synchronized 加锁 this 时只有同一个对象会使用同一把锁不同对象之间的锁是不同的。本系列原创文章推荐1.线程的故事我的3位母亲成就了优秀的我2.线程池的7种创建方式强烈推荐你用它...3.轻量级锁一定比重量级锁快吗4.这样终止线程竟然会导致服务宕机5.漫画如何证明sleep不释放锁而wait释放锁6.池化技术到达有多牛看了线程和线程池的对比吓我一跳7.求求你别再用wait和notify了8.Semaphore自白限流器用我就对了9.CountDownLatch别浪等人齐再团10.CyclicBarrier人齐了老司机就发车了11.Java中用户线程和守护线程区别这么大12.ThreadLocal不好用那是你没用对13.ThreadLocal内存溢出代码演示和原因分析14.SimpleDateFormat线程不安全的5种解决方案
http://www.pierceye.com/news/313697/

相关文章:

  • wordpress官网案例移动端优化
  • 广告投放网宁波seo网络推广报价
  • 网站模板 哪个好烟台高端网站建设公司
  • 福建网站开发手机软件app下载
  • 网站开发的功能需求怎么写网页版式设计分析
  • 荔浦网站开发乐陵新闻最新消息今天
  • 盘锦网站建设服务如何上传网站到空间
  • 怎样建设自己网站常德seo招聘
  • 用别人家网站做跳转做商品抬价是什么兼职网站
  • 合肥市建设信息中心网站怎么做网站的签约编辑
  • 6入空间网站免费观看网站标题怎么修改
  • iis服务器的默认网站wordpress多级分销插件
  • jquery 网站后台模板 仿2021好心人给个开车的网站
  • 济宁定制网站建设推广关于协会网站建设的意见
  • 门户网站建站要求滨州网站seo服务
  • 国外 视频上传网站源码怎么看网站的访问量
  • 网站的建设框架3网站建设
  • 购物网站设计的目的wordpress 游戏主题下载失败
  • 兰州最好的网站开发公司单页网站是什么样子的
  • 在线购物商城网站江苏营销型网站
  • 如何在百度上为企业做网站wordpress轮播图设置
  • qt 网站开发怎样开发一个app软件
  • html5博客网站模板泉州市住房与城乡建设网站
  • 没网站怎么做app创意设计图片
  • 重庆涪陵网站设计公司推荐外贸优化网站制作
  • 网页怎么制作四页石家庄seo排名外包
  • 高校信息化建设 网站东阳网络科技有限公司
  • 网站 如何做 中英文切换网站怎么提升关键词排名
  • 企业只有建立自己的网站平台金坛建设局网站
  • 网站建设及维护费用网站开发质量控制计划书