JAVA 并发编程学习(1)之基本概念

简介:

1,为什么需要并发?

在早期计算机中没有操作系统,一台计算机从头到尾只执行一个程序,如果这个程序的任务是先进行CPU计算再把计算结果写入文件。那么,在进行CPU计算时,这台计算机的IO模块是空闲的,把计算结果写入文件中时,这台计算机的CPU是空闲的。

为此,引入了操作系统。这样,在一台计算机中可以运行多个程序了。由操作系统来管理多个程序的运行,一个程序在进行CPU计算的同时,另一个程序可以进行IO操作。提高了计算机的利用率(CPU和IO操作 可以同时在发生了)

引入操作系统之后,不可避免地出现了进程这个概念。因为操作系统管理若干个程序了,而每个运行中的程序可以用进程来表示(进程的动态性)。

那为什么还需要线程呢?

①进程之间需要通信、需要共享一些数据,需要协作……这些用线程来“表示”更方便。因为,不同进程的地址空间是相互独立的,一个进程不能直接访问另一个进程的地址空间。一个进程内部的多个线程共享这个进程状态空间,如果把数据的共享放到线程这个层次来实现,就方便多了。

②进一步提高资源利用率---这个有点类似于:从没有操作系统的计算机到有操作系统的计算机转变---这里是从没有线程到有线程转变。

 

2,我们就是因为方便数据共享……一些原因引入了线程,那么多个线程同时访问一个可变的变量时,这个变量到底处理哪一个状态?这就存在一种线程安全性问题。

 

3,什么是线程安全性

讨论线程安全性针对的是 类。核心就是正确性。即,某个类的行为和其规范完全一致:即,我写了一个类,这个类具有哪些功能,需要完成哪些操作……这些是类的规范;而多个线程运行这个类的代码时,其执行效果和规范描述的要一致。

当多个线程访问某个类时,不管运行时环境采用何种调度方式或者这些线程将如何交替执行,并且在主调代码中不需要任何额外的同步或协调,这个类都能表现出正确的行为,那么就称这个类是线程安全的。

 

4,无状态对象

 

5,Race Condition 竞态条件

①读--修改--写入

②check--then--act

 本文转自hapjin博客园博客,原文链接:http://www.cnblogs.com/hapjin/,如需转载请自行联系原作者

相关文章
|
23天前
|
存储 Java 编译器
Java 零基础入门学习(小白也能看懂!)
Java 零基础入门学习(小白也能看懂!)
|
1天前
|
Java 测试技术 Maven
JAVA单元测试概念与实战
单元测试是软件开发中的一个测试方法,用于验证软件代码中最小的、独立的单元是否按照预期工作。在Java中,这通常指的是单个的方法或者一个类的个别功能。单元测试的目的是隔离代码的每个部分,并确保各个部分是正确的。
18 4
|
1天前
|
缓存 安全 Java
Java并发编程中的线程安全性探讨
【2月更文挑战第6天】在Java开发中,多线程编程是一种常见的方式,然而如何确保线程安全性却是一个复杂且关键的问题。本文将深入探讨Java并发编程中的线程安全性,包括线程安全性的概念、常见的线程安全性问题以及解决方法,旨在帮助开发者更好地理解和应对多线程环境下的挑战。
|
1天前
|
缓存 安全 Java
Java并发编程中的线程安全性问题与解决方法
【2月更文挑战第6天】在Java并发编程中,线程安全性一直是一个重要的问题。本文将深入探讨Java中线程安全性问题的根源,以及针对这些问题提出的解决方法,包括使用同步关键字、Lock对象、volatile关键字等。通过本文的学习,读者将更好地理解Java并发编程中的线程安全性问题,并能够运用相应的解决方法来保障程序的稳定性和可靠性。
10 4
|
2天前
|
监控 Java 开发者
Java并发编程中的线程池优化策略
【2月更文挑战第6天】在Java并发编程中,合理地使用线程池是提高程序性能和效率的关键。本文将探讨线程池的优化策略,包括核心线程数设置、队列类型选择、拒绝策略等方面,帮助开发者更好地利用线程池来处理并发任务。
19 8
|
3天前
|
安全 Java 调度
Java中的并发编程挑战与解决方案
【2月更文挑战第5天】在日益复杂的软件开发环境中,Java作为一种广泛应用的编程语言,面临着越来越多的并发编程挑战。本文将探讨Java中常见的并发问题,并提供相应的解决方案,帮助开发人员更好地应对并发编程中的挑战。
|
3天前
|
监控 Java 数据库
Java并发编程中的线程池优化
【2月更文挑战第5天】在Java并发编程中,线程池是一种重要的机制,它可以有效地管理线程的创建和销毁,提高系统的性能和资源利用率。本文将介绍线程池的基本概念,分析线程池的使用场景和常见问题,并探讨如何优化线程池的配置和调整,以实现更高效的并发编程。
|
5天前
|
安全 Java 程序员
Java泛型编程:技巧与实践
Java泛型编程:技巧与实践
|
20天前
|
存储 传感器 机器学习/深度学习
Java数组全套深入探究——进阶知识阶段6、三维数组以及更多维度数组的概念和用法
Java数组全套深入探究——进阶知识阶段6、三维数组以及更多维度数组的概念和用法
21 0
|
23天前
|
监控 安全 Java
CompletableFuture探秘:解锁Java并发编程的新境界
CompletableFuture探秘:解锁Java并发编程的新境界
124 0