一、线程安全的工作原理:
官方解释:jvm中有一个 main memory ,每个线程也有自己的 working memeory.。当一个线程访问一个对象时,会在自己的working memory 创建并复制过来,当多个线程访问同一个变量时就会产生不可预知的结果。
一般通过synchronized(同步)关键字建立一个监控(monitor)。这个monitor可以是要修改的变量,也可以是其他自己认为合适的对象(方法),然后通过给这个monitor加锁来实现线程安全,每个线程在获得这个锁之后,要执行完加载到自己的working memory 到 use 之后 指派到 存储到 main memory的过程。才会释放它得到的锁。这样就实现了所谓的线程安全。
二、线程安全的类
-
Vector 线程安全:动态数组
HashTable 线程安全:
StringBuffer 线程安全:
三、非线程安全的类
-
ArrayList :集合
LinkedList:集合
HashMap:集合
HashSet:集合
TreeMap:集合
TreeSet:集合
StringBulider:可变字符序列
四、多线程的使用场景
-
tomcat ,tomcat内部采用多线程,上百个客户端访问同一个WEB应用,tomcat接入后就是把后续的处理扔给一个新的线程来处理,这个新的线程最后调用我们的servlet程序,比如doGet或者dpPost方法.
-
异步处理大文件。
-
数据库使用多线程。
-
后台任务。
声明:文中观点不代表本站立场。本文传送门:https://eyangzhen.com/242938.html