回顾以前的线程安全的类
回顾前面的线程安全问题(看看源码)
StringBuffer/StringBuilder
Vector
Hashtable
以及Collections中的让集合同步的方法
示例代码如下:
1 package cn.itcast_12; 2 3 import java.util.ArrayList; 4 import java.util.Collections; 5 import java.util.Hashtable; 6 import java.util.List; 7 import java.util.Vector; 8 9 public class ThreadDemo { 10 public static void main(String[] args) { 11 // 线程安全的类 12 StringBuffer sb = new StringBuffer(); // 几乎所有的方法都加了synchronized,所以线程安全,但效率低。 13 Vector<String> v = new Vector<String>(); // 几乎所有的方法都加了synchronized,所以线程安全,但效率低。 14 Hashtable<String, String> h = new Hashtable<String, String>(); // 几乎所有的方法都加了synchronized,所以线程安全,但效率低。 15 16 // Vector是线程安全的时候才会去考虑使用的,但是呢,即使要安全,也不用Vector。 17 // 为什么呢?那么到底用谁呢? 18 // Collections工具类的让集合同步的方法,以List举例: 19 // public static <T> List<T> synchronizedList(List<T> list) 20 List<String> list1 = new ArrayList<String>(); // 线程不安全的List 21 List<String> list2 = Collections.synchronizedList(new ArrayList<String>()); // 线程安全的List 22 // 通过Collections类的让集合同步的方法,就把线程不安全的List变成线程安全的List了,所以我们不用Vector! 23 } 24 }
我的GitHub地址: https://github.com/heizemingjun
我的博客园地址: http://www.cnblogs.com/chenmingjun
我的蚂蚁笔记博客地址: http://blog.leanote.com/chenmingjun
Copyright ©2018 黑泽明军
【转载文章务必保留出处和署名,谢谢!】
低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。
持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。
转载内容版权归作者及来源网站所有,本站原创内容转载请注明来源。
- 上一篇
Java中如何通过一个类名来调用另一个类的静态方法?
Java中可以在一个类中调用另一个类的静态公有方法。 首先是公有方法:表示其他类是可以被访问的。 调用静态公有方法的语法是:类名.方法名(参数...); 所以,比如另一个类叫OtherClass,它的静态公有方法是 public static int MethodA() {...} 那么在你自己的类里调用的方式就是:int result = OtherClass.MethodA(); 另外,调用非静态公有方法(也叫成员方法),比如方法叫 public int MethodB() {...} 就必须先创建这个类的对象再调用其方法, 例如:int result2 = new OtherClass().MethodB(); 我的GitHub地址: https://github.com/heizemingjun 我的博客园地址: http://www.cnblogs.com/chenmingjun 我的蚂蚁笔记博客地址: http://blog.leanote.com/chenmingjun Copyright ©2018 黑泽明军 【转载文章务必保留出处和署名,谢谢!】
- 下一篇
多线程之并发基础(三)
线程是轻量级的进程,进程可以说是线程的容器。线程是程序执行的最小单位。使用多线程而不是使用多进程进行并发程序的设计,因为线程的切换和调度成本远远小于进程。 与文无关 本文知识点目录: 线程的状态 线程的常见操作 Daemon线程 线程优先级 wait与notify 线程的状态 在Java程序中,线程有如下状态 NEW(新建): 新的线程刚刚创建,还没有启动。 Runnable(就绪):线程已经调用了start方法,正在被JVM执行的时候,也有可能正在等待某个操作系统的资源。 Blocked(阻塞):有其它线程占着锁不释放,当前线程阻塞与锁 Waiting(等待):表示当前线程需要等待其它线程做出一些特定动作(通知或中断),当调用以下方法时会进入此状态。 Object.wait()没有时间参数 Thread.join()没有超时参数 LockSupport.park方法 Timed Waiting(等待并计时):指定时间waiting,一边等,一边计时,一般调用如下方法可以j进入此状态。 Thread.sleep Object.wait()带有参数 Thread.join ()带有超时参...
相关文章
文章评论
共有0条评论来说两句吧...
文章二维码
点击排行
推荐阅读
最新文章
- Docker使用Oracle官方镜像安装(12C,18C,19C)
- CentOS7,8上快速安装Gitea,搭建Git服务器
- SpringBoot2整合MyBatis,连接MySql数据库做增删改查操作
- Docker安装Oracle12C,快速搭建Oracle学习环境
- Windows10,CentOS7,CentOS8安装Nodejs环境
- Springboot2将连接池hikari替换为druid,体验最强大的数据库连接池
- CentOS7,CentOS8安装Elasticsearch6.8.6
- CentOS8安装Docker,最新的服务器搭配容器使用
- 设置Eclipse缩进为4个空格,增强代码规范
- CentOS7安装Docker,走上虚拟化容器引擎之路