|
|
51CTO旗下网站
|
|
移动端

1.6.1 什么是线程安全

《Java多线程与Socket:实战微服务框架》第1章多线程基础,本书尽量采用简要和通俗易懂的方式来介绍多线程知识。本节为大家介绍什么是线程安全。

作者:庞永华来源:电子工业出版社|2019-03-26 15:50

1.6 线程安全与效率

多线程的主要目的是提升程序的效率,但保证线程安全是首要的前提。在保证线程安全的前提下,如何提升性能是多线程编程领域极为重要的课题。即使多个线程之间并不共享资源,不存在线程安全问题,仍然需要关注可能存在线程饥饿与公平等其他问题。

在具体地学习Java多线程API之前,我们需要先打好理论基础。本章将重点介绍多线程编程方向最需要关注的安全与效率等方面。

1.6.1 什么是线程安全

我们先来看一个例子:启动20个线程并发地执行,每个线程执行10 000次,并发地往静态成员Set集合data中添加Integer对象。

  1. public class C1_6_1 implements Runnable {  
  2. private static final Set<Integer> data = new HashSet<Integer>();  
  3. private static int count;  
  4. protected int page;  
  5. public C1_9_1(int page) {  
  6. this.page = page;  
  7. }  
  8. @Override  
  9. public void run() {  
  10. int v = page * 10000;  
  11. for (int i = 0; i < 10000; i++) {  
  12. data.add(v++);  
  13. count++;  
  14. Thread.yield();  
  15. }  
  16. }  
  17. public static void main(String[] args) {  
  18. ExecutorService es = Executors.newFixedThreadPool(5);  
  19. for (int i = 0; i < 20; i++) {  
  20. es.execute(new C1_9_1(i));  
  21. }  
  22. es.shutdown();  
  23. try {  
  24. es.awaitTermination(10L, TimeUnit.SECONDS);  
  25. } catch (InterruptedException e) {  
  26. e.printStackTrace();  
  27. }  
  28. System.out.print("size = ");  
  29. System.out.println(data.size());  
  30. System.out.print("count = ");  
  31. System.out.println(count);  
  32. }  

预期的data集合大小应该是20万个元素,但最终打印出来的data集合的大小却不是20万个元素,count变量也并非预期的20万个元素。这样的程序显然就不是线程安全的。

线程安全是指共享资源在多线程环境下是安全的,不会因为被多个线程并发地修改而出现数据破坏、丢失更新、死锁等问题。被多个线程并发访问的全局变量、静态变量、文件、设备、Socket(套接字)等都属于共享资源,这些共享资源在多线程访问的情况下都需要考虑线程安全问题。

线程安全主要考虑3个方面。

(1)可见性:当多个线程并发地读写某个共享资源时,每个线程总是能读取到该共享资源的***数据。

(2)原子性:某个线程对一个或多个共享资源所做的一连串写操作不会被中断,在此期间不会有其他线程同时对这些共享资源执行写操作。

(3)有序性:单个线程内的操作必须是有序的。


喜欢的朋友可以加入官方的读书群

51CTO读书频道二维码


51CTO读书会第9群:808517103

【责任编辑:book TEL:(010)68476606】

回书目   上一节   下一节
点赞 0
分享:
大家都在看
猜你喜欢

订阅专栏+更多

16招轻松掌握PPT技巧

16招轻松掌握PPT技巧

GET职场加薪技能
共16章 | 晒书包

289人订阅学习

20个局域网建设改造案例

20个局域网建设改造案例

网络搭建技巧
共20章 | 捷哥CCIE

645人订阅学习

WOT2019全球人工智能技术峰会

WOT2019全球人工智能技术峰会

通用技术、应用领域、企业赋能三大章节,13大技术专场,60+国内外一线人工智能精英大咖站台,分享人工智能的平台工具、算法模型、语音视觉等技术主题,助力人工智能落地。
共50章 | WOT峰会

0人订阅学习

读 书 +更多

无懈可击的Web设计

一个网站,无论视觉上多美观或者内容多丰富,如果它不能适应各种浏览情况并能面向尽可能广泛的用户群,那它就不算是真正成功的网站。本书提...

订阅51CTO邮刊

点击这里查看样刊

订阅51CTO邮刊

51CTO服务号

51CTO播客