博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
浅谈JAVA的线程安全与性能之间的权衡
阅读量:6761 次
发布时间:2019-06-26

本文共 1693 字,大约阅读时间需要 5 分钟。

1、StringBuffer 与 StringBuilder

StringBuffer自JDK1.0就有了,继承自AbstractStringBuilder类,是线程安全的类,推荐在多线程环境下使用;

StringBuilder是JDK1.5才加的,多线程环境下不推荐使用,非线程安全的工具类,但是单线程环境下比StringBuffer性能提高很多;StringBuffer的线程安全是用synchronized实现的,隐式加锁。

经过代码多次运行测试,单线程环境下StringBuilder的性能比StringBuffer略高:

测试代码:

System.out.println("========StringBuilder======");        long start2 = System.currentTimeMillis();        for(int i=0;i<1000000;i++){            StringBuilder sb = new StringBuilder();            sb.append(3.1415926);            sb.append("test welcome to java world");            sb.append(true);            sb.toString();        }        System.out.println(System.currentTimeMillis() - start2 + "mills");                System.out.println("========StringBuffer======");        long start = System.currentTimeMillis();        for(int i=0;i<1000000;i++){            StringBuffer sb = new StringBuffer();            sb.append(3.1415926);            sb.append("test welcome to java world");            sb.append(true);            sb.toString();        }        System.out.println(System.currentTimeMillis() - start + "mills");
测试结果:
========StringBuilder======
1861mills
========StringBuffer======
2042mills

2、Hashtable、ConcurrentHashMap 与 HashMap

Hashtable自JDK1.0就有了,是线程安全的散列容器,HashMap是JDK1.2才开始加的,多线程环境下不推荐使用,非线程安全的,
但是单线程环境下比Hashtable性能提高很多;ConcurrentHashMap是JDK1.5才开始加的,是线程安全的,多线程环境下推荐使用;
Hashtable的线程安全是用synchronized实现的,而ConcurrentHashMap是基于显示的lock;

synchronized的用法:

public synchronized V put(K key, V value) {    // do something}
lock的用法:
V put(K key, int hash, V value, boolean onlyIfAbsent) {    lock();    try {        // do something    } finally {        unlock();    }}

3、总结:

个人理解,线程安全和高性能不可兼得,只有最合适的选择,没有最好的选择

转载地址:http://pfdeo.baihongyu.com/

你可能感兴趣的文章
字符串和ASCII之间的转换
查看>>
python3学习笔记(二):Python初识
查看>>
Servlet 文件上传
查看>>
JQ - 绑定(on)/解绑(off)事件(浅显的见解)
查看>>
JavaScript setInterval(定时/延时调用函数)
查看>>
Quartz.NET 任务调度教程。
查看>>
华为oj之字符串反转
查看>>
数据访问
查看>>
JSP里面的虚拟目录
查看>>
【329】word 替换文本高级用法
查看>>
自动化测试用例编写原则
查看>>
crontab定时任务以及其中中文乱码问题
查看>>
CSAPP buffer lab记录——IA32版本
查看>>
Hyperledger fabric多机的环境部署
查看>>
关于sqlserver2008 bcp根据数据表导出xml格式文件的小记
查看>>
总结:栈和队列的学习
查看>>
线段树(可能还会有树状数组吧)
查看>>
Management Console 工具管理类软件通用开发框架(开放源码)
查看>>
Gnome 3.2 发布计划及新功能
查看>>
已超过传入消息(65536)的最大消息大小配额。若要增加配额,请使用相应绑定元素上的 MaxReceivedMessageSize 属性...
查看>>