浅谈synchronized方法对非synchronized方法的影响

 更新时间:2017年10月10日 09:00:52   作者:/*小神经*/  
下面小编就为大家带来一篇浅谈synchronized方法对非synchronized方法的影响。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧

StringBuilder是线程不安全的类。

StringBuffer是线程安全的,因为它里面的方法加了synchronized。

今天写了一段代码测试了一下:用循环开启10个线程,调用StringBuffer(StringBuilder)的append追加1 到 10 。

结果预期一样:线程不安全的StringBuilder会漏掉一些数字,

public static void main(String[] args) throws InterruptedException {
  StringBuffer buffer = new StringBuffer();
  StringBuilder builder = new StringBuilder();
  // 开启十个线程,分别对buffer 和 builder 操作  
  for(int i = 0; i < 10; i++) {
   int j = i;
   new Thread(new Runnable() {
    public void run() {
     try {
      Thread.sleep(500); //造成阻塞
     } catch (InterruptedException e) {
      e.printStackTrace();
     }
     builder.append(j);
    }
   }).start();
  }
  //等待以上操作完成
  Thread.sleep(1000);
  // 打印结果
  System.out.println("builder:"+builder);
 }

线程安全的StringBuffer则追加了全部10个数字:

public static void main(String[] args) throws InterruptedException {
 StringBuffer buffer = new StringBuffer();
 StringBuilder builder = new StringBuilder();
 // 开启十个线程,分别对buffer 和 builder 操作  
 for(int i = 0; i < 10; i++) {
  int j = i;
  new Thread(new Runnable() {
   public void run() {
    try {
     Thread.sleep(500); //造成阻塞
    } catch (InterruptedException e) {
     e.printStackTrace();
    }
    buffer.append(j);
   }
  }).start();
 }
 //等待以上操作完成
 Thread.sleep(1000);
 // 打印结果
 System.out.println("buffer:"+buffer);
}

这时:如果我同时操作builder和buffer,且先调用buffer的append,这时每次操作因为builder和buffer在同一个线程,builder的方法因为buffer阻塞了线程而被变成“同步”的方法,同样append了10个数字

public static void main(String[] args) throws InterruptedException {
 StringBuffer buffer = new StringBuffer();
 StringBuilder builder = new StringBuilder();
 // 开启十个线程,分别对buffer 和 builder 操作  
 for(int i = 0; i < 10; i++) {
  int j = i;
  new Thread(new Runnable() {
   public void run() {
    try {
     Thread.sleep(500); //造成阻塞
    } catch (InterruptedException e) {
     e.printStackTrace();
    }
    buffer.append(j);
    builder.append(j);
   }
  }).start();
 }
 //等待以上操作完成
 Thread.sleep(1000);
 // 打印结果
 System.out.println("buffer:"+buffer);
 System.out.println("builder:"+builder);
}

以上这篇浅谈synchronized方法对非synchronized方法的影响就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持脚本之家。

相关文章

  • jmeter下载及安装配置教程(win10平台为例)

    jmeter下载及安装配置教程(win10平台为例)

    Apache JMeter是Apache组织开发的基于Java的压力测试工具,Apache jmeter 可以用于对静态的和动态的资源(文件,Servlet,Perl脚本,java 对象,数据库和查询,FTP服务器等等)的性能进行测试,本文给大家介绍jmeter下载及安装配置过程,感兴趣的朋友一起看看吧
    2021-12-12
  • IntelliJ IDEA设置显示内存指示器和设置内存大小的方法

    IntelliJ IDEA设置显示内存指示器和设置内存大小的方法

    这篇文章主要介绍了IntelliJ IDEA设置显示内存指示器和设置内存大小的方法,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2020-04-04
  • Java集合中的LinkedHashSet源码解读

    Java集合中的LinkedHashSet源码解读

    这篇文章主要介绍了Java集合中的LinkedHashSet源码解读,在LinkedHashMap中,双向链表的遍历顺序通过构造方法指定,如果没有指定,则使用默认顺序为插入顺序,即accessOrder=false,需要的朋友可以参考下
    2023-12-12
  • Java使用HashMap映射实现消费抽奖功能

    Java使用HashMap映射实现消费抽奖功能

    这篇文章主要为大家详细介绍了Java使用HashMap映射实现消费抽奖功能,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2021-09-09
  • IDEA常量字符串过长问题及解决方案

    IDEA常量字符串过长问题及解决方案

    在编译Java项目时遇到“常量字符串过长”错误,可以通过修改编译器设置解决,具体方法是进入IDE的设置(File>>Settings>>Build, Execution, Deployment>>Compiler>>Java Compiler),将使用的编译器更改为Eclipse,如果问题依旧
    2024-10-10
  • SpringCloudAlibaba Nacos开启鉴权解决跳过登录页面问题

    SpringCloudAlibaba Nacos开启鉴权解决跳过登录页面问题

    对于Nacos,如果需要开启权限控制,可以在 Nacos 控制台上进行配置,本文主要介绍了SpringCloudAlibaba Nacos开启鉴权解决跳过登录页面问题,感兴趣的可以了解一下
    2023-10-10
  • 线程池满Thread pool exhausted排查和解决方案

    线程池满Thread pool exhausted排查和解决方案

    这篇文章主要介绍了线程池满Thread pool exhausted排查和解决方案,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2022-11-11
  • java实现客户管理系统

    java实现客户管理系统

    这篇文章主要为大家详细介绍了java实现客户管理系统,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2022-05-05
  • ActiveMQ基于zookeeper的主从(levelDB Master/Slave)搭建

    ActiveMQ基于zookeeper的主从(levelDB Master/Slave)搭建

    这篇文章主要介绍了ActiveMQ基于zookeeper的主从levelDB Master/Slave搭建,以及Spring-boot下的使用方法,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2017-08-08
  • spring  mybatis多数据源实例详解

    spring mybatis多数据源实例详解

    本文主要介绍sping mybatis多数据源处理,在开发过程中经常会遇到多个数据库,这里给大家举例说明如何处理,希望能帮助有需要的小伙伴
    2016-07-07

最新评论