返回顶部
首页 > 资讯 > 精选 >Java线程安全基础概念解析
  • 175
分享到

Java线程安全基础概念解析

java线程安全ava 2023-05-31 03:05:51 175人浏览 薄情痞子
摘要

Java线程安全初步了解。JAVA线程安全从总体上来说,是指Java对象在多线程运行环境下的一种特性,表现为常规(区别于特殊调用情况)情况下每次调用都能得到正确的逻辑结果。从本质上来说,将对象的方法行为加上了同步控制逻辑,而调用者无须做其他

Java线程安全初步了解。JAVA线程安全从总体上来说,是指Java对象在多线程运行环境下的一种特性,表现为常规(区别于特殊调用情况)情况下每次调用都能得到正确的逻辑结果。从本质上来说,将对象的方法行为加上了同步控制逻辑,而调用者无须做其他额外的同步控制就可以安全放心的使用对象。

1.线程安全的定义

当多个线程访问一个对象时,如果不用考虑这些线程在运行时环境下的调度和交替执行,也不需要进行额外的同步,或者在调用方进行任何其他的协调操作,调用这个对象的行为都可以获得正确的结果,那这个对象就是线程安全的。这个定义很严谨,它要求就线程安全的代码都具备一个特征:代码本身封装了所有必要的正确性保障手段,令调用者无须关心多线程的问题,更无须自己实现热河措施来保证多线程的正确调用。

2.Java语言中的线程安全

为了更深入地理解线程安全,按照线程安全的“安全强度”由强至弱来排序:不可变,绝对线程安全,相对线程安全,线程兼容和线程对立。

2.1 不可变

jdk1.5以后不可变的对象一定是线程安全的,无论是对象的方法实现还是方法的调用者,都不需要再进行任何的线程安全保障措施,通过final关键字修饰的属性,对象或方法,那其外部的可见状态永远也不会改变。如果共享数据是一个基本数据类型,那么只要在定义时使用final关键字修饰就可以保证它是不可变得。如String类对象,就是一个典型的不可变对象,我们调用substring(),replace(),和concat()这些方法都不会影响它原来的值,只会返回一个新构造的字符串对象。

2.2相对线程安全

相对线程安全就是我们通常意义上所讲的线程安全,它需要保证这个对象单独的操作是线程安全的。在java中大部分线程安全类都属于这种类型,如Vector,HashTable等。

2.3线程兼容

线程兼容是指对象本身并不是线程安全的,但是可以通过在调用端正确地使用同步手段来保证对象在并发环境中安全地使用。

2.3线程对立

线程对立是指不管调用端是否采用了同步措施,都无法在多线程环境中并发使用的代码。由于Java语言天生就具备多线程特性,线程对立这种排斥多线程的代码很少出现。常见的线程对立操作有Thread类的suspend()和resume()方法,System.setIn()等。

3.线程安全的实现方法

3.1互斥同步

互斥同步是最常见的一种并发正确性保障手段,同步是指在多个线程并发访问共享数据时,保证共享数据在同一个时刻只被一条线程使用。而互斥是实现同步的一种手段,临界区,互斥量和信号量都是主要的互斥实现方式。互斥是因,同步是果,互斥是方法,同步是目的。

在Java中,最基本的互斥同步手段就是synchronized关键字。除此之外还可以使用java.util.concurrent包中的重入(ReentrantLock)来实现同步。在用法上都很相似,只是代码写法上有点区别,一个表现为api层面的互斥锁(lock()和unlock()方法配合try/finally语句块来完成),一个表现为原生语法层面的互斥锁。不过重入锁比synchronized增加了以下三项:
等待可中断:是指当持有锁的线程长期不释放锁的时候,正在等待的线程可以选择放弃等待,改为处理其他事情,可中断特性对处理执行时间非常长的同步块很有帮助。

可实现公平锁:公平锁是指多个线程在等待同一个锁时,必须按照申请锁的时间顺序来依次获得锁;而非公平锁则不保证这一点。synchronized中的锁是非公平的,重入锁缺省也是非公平的,但可以通过带布尔值的构造函数要求使用公平锁。

锁可以绑定多个条件:是指一个重入锁对象可以同时绑定多个Condition对象,而在synchronized中,锁对象的wait()和notify()或notifyAll()方法可以实现一个隐含条件,如果要和多于一个的条件关联的时候,就不得不额外的添加y一个锁,而重入锁无须这样做,只需要多次调用newCondition()方法即可。

3.2非阻塞同步

互斥同步最重要的问题就是进行线程阻塞和唤醒所带来的性能问题,它属于一种悲观的并发策略,总是认为只要不去做正确的同步措施就会出现问题。但是我们有了另外一个选择:基于冲突检测的乐观并发策略,通俗的说就是先进行操作,如果没有其他线程争用共享数据,那操作就成功了;如果共享数据发生了争用,产生了冲突,那就再进行其他的补偿措施,这种乐观的并发策略的许多实现都不需要把线程挂起,因此被称为非阻塞同步。

总结

以上就是本文关于Java线程安全基础概念解析的全部内容了,希望对大家有所帮助,也希望大家多多支持编程网。

--结束END--

本文标题: Java线程安全基础概念解析

本文链接: https://lsjlt.com/news/223277.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
  • Java线程安全基础概念解析
    Java线程安全初步了解。JAVA线程安全从总体上来说,是指Java对象在多线程运行环境下的一种特性,表现为常规(区别于特殊调用情况)情况下每次调用都能得到正确的逻辑结果。从本质上来说,将对象的方法行为加上了同步控制逻辑,而调用者无须做其他...
    99+
    2023-05-31
    java 线程安全 ava
  • Java多线程——基础概念
    目录java多线程并发与并行:多线程使用场景:创建线程的方式:Thread类的有关方法:线程的同步:       ...
    99+
    2024-04-02
  • Java多线程基础概念是什么
    本篇内容主要讲解“Java多线程基础概念是什么”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“Java多线程基础概念是什么”吧!并发与并行并行,表示两个线程同时做事情。并发,表示一会做这个事情,一...
    99+
    2023-06-17
  • Go语言基础概念解析
    go 语言是一门高性能、并发编程语言,其基础概念包括:基本类型(整数、浮点数、布尔值、字符串、字符);通过 var 关键字声明变量,并支持类型推断;使用 const 关键字声明常量;提供...
    99+
    2024-04-08
    go语言 基础概念
  • JAVA多线程线程安全性基础
    目录线程安全性什么是线程安全的代码什么是线程安全性 总结线程安全性 一个对象是否需要是线程安全的,取决于它是否被多个线程访问,而不取决于对象要实现的功能 什么是线程安全的代码 核心:...
    99+
    2024-04-02
  • 云服务器ecs基础概念安全组
    云服务器ECS基础概念安全组通常由以下几个组成部分组成: 应用程序管理员(Apps Manager):负责应用程序的用户身份认证和审核。他们的角色是验证应用程序和服务器之间的访问控制协议(ACL),确保用户身份和应用程序的敏感信息得到保...
    99+
    2023-10-26
    概念 服务器 基础
  • JavaHttp的基础概念了解
    目录基本概念了解网络的分层HTTP协议HTTP和TCP的关系总结学完了计算机网络课程以后,确实学到了一些网络的概念,初步拥有了对网络的一些认识。这些概念虽然可以用来解释平时网络上遇到...
    99+
    2023-05-17
    java Http Http基础概念
  • Java线程安全与非线程安全解析
    ArrayList和Vector有什么区别?HashMap和HashTable有什么区别?StringBuilder和StringBuffer有什么区别?这些都是Java面试中常见的基础问题。面对这样的问题,回答是:ArrayList是非线...
    99+
    2023-05-31
    java 线程安全 ava
  • Java基础夯实之线程问题全面解析
    目录1. 线程是什么2. 怎样创建线程2.1 继承Thread类2.2 实现Runnable接口2.3 实现Callable接口2.4 使用线程池创建3. 线程的状态4. 线程常用方...
    99+
    2022-11-13
    Java线程解析 Java线程
  • java线程的基础实例解析
    目录一、线程初步认识1、什么是线程2、Java本身就是多线程3、为什么要使用多线程4、线程的优先级5、线程的状态​6、Daemon线程二、线程启动和终止1、构造线程2、什...
    99+
    2024-04-02
  • 怎样解析Java基础多线程
    怎样解析Java基础多线程,很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。 多线程是Java学习的非常重要的方面,是每个Java程序员必须掌握的基本技能。一、进程...
    99+
    2023-06-02
  • LINQ基础概念怎么理解
    本篇内容介绍了“LINQ基础概念怎么理解”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!要想更好地了解LINQ,首先需要了解LINQ基础概念。...
    99+
    2023-06-17
  • Golang函数基础概念详解
    随着现代编程语言的快速发展,Golang已经成为越来越多人的首选语言。而作为Golang语言中的基础概念之一的函数,更是为程序员们提供了强大的工具支持。本文将会详细解释Golang函数的定义、参数、返回值、作用域等基本概念,以及一些高级应用...
    99+
    2023-05-17
    函数 Golang 基础概念
  • Python语法概念基础详解
    目录Python之禅:Python基础:1.进制转换:2.数据类型:3.单双引号转义字符的使用:4.单双三引号的转义换行:5.字符串的运算:6.组的概念与含义:7.集合:8.系统关键...
    99+
    2024-04-02
  • 缓存的基础概念解读
    高速缓存(Cache,简称缓存),原始意义是指访问速度比一般随机存取存储器(RAM)快的一种RAM,通常它不像系统主存那样使用DRAM技术,而使用昂贵但较快速的SRAM技术。Cache是位于CPU和DRAM之间,通常由SRAM构成的规模小存...
    99+
    2023-06-04
  • 基于线程、并发的基本概念(详解)
    什么是线程?提到“线程”总免不了要和“进程”做比较,而我认为在Java并发编程中混淆的不是“线程”和“进程”的区别,而是“任务(Task)”。进程是表示资源分配的基本单位。而线程则是进程中执行运算的最小单位,即执行处理机调度的基本单位。关于...
    99+
    2023-05-31
    线程 基本概念 并发
  • JAVA基本概念详解
    目录一、java发展史二、Java跨平台二、JRE和JDK三、下载JDK四、常用的DOS命令五、配置Path环境变量六、第一个程序六、bug(甲壳虫)七、Notepad八、注释九、关...
    99+
    2024-04-02
  • 网络基础入门(网络基础概念详解)
      本篇文章主要是对网络初学的概念进行解释,可以让你对网络有一个大概整体的认知。 文章目录 一、简单认识网络 1、1 什么是网络 1、2 网络分类  二、网络模型 2、1OSI七层模型 2、1、1 简单认识协议 2...
    99+
    2023-10-03
    网络
  • Java多线程编程的概念
    这篇文章主要讲解了“Java多线程编程的概念”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“Java多线程编程的概念”吧!Java多线程编程是什么?一个程序或进程能够包含多个线程,这些线程可以...
    99+
    2023-06-17
  • 怎么分析大数据分析基础概念
    本篇文章给大家分享的是有关怎么分析大数据分析基础概念,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。互联网进一步聚合,对大数据的分析必然会成为一个关键的策略部门的工作。像很多事物...
    99+
    2023-06-19
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作