多线程环境中如何保证线程安全?java可以实现线程安全的方式归纳如下:

1、使用synchronized关键字

synchronized关键字可以修饰方法和代码块,它的语义是保证同一段代码同一时间只能有一个线程在执行。

2、使用volatile关键字

volatile关键字用来修饰共享变量。它的语义是保证被修饰的变量在被一个线程修改后,都会通知其他线程,其他线程需要操作该变量时会重新获取,这样每个线程在操作该共享变量时获取到的值都是很新的,但是volatile关键字无法保证原子性,怎么来理解这句话呢?在你写的对该变量操作的一行代码,在执行时是拆分成多条字节码指令后执行的,所以对volatile修饰的变量操作时,需要保证该操作具有原子性。有些操作本身就具有原子性,无需额外编码,比如:volatile修饰boolean类型的变量,对该变量的操作是赋值操作。对于不具备原子性的操作,则需要使用某些方法来保证原子性,比如:使用原子类来替代基本数据类型

3、使用原子类代替基本数据类型

java提供三种类型的原子类,当某个操作因为不是原子操作导致的线程安全问题的时候,可以使用原子类来替代。比如:多线程环境下执行a++,可以使用AtomicInteger类incrementAndGet()方法实现。相比synchronized,原子类是使用乐观锁来实现线程安全,synchronized使用悲观锁来实现线程安全。

4、使用ThreadLocal对各个线程进行隔离

使用ThreadLocal保存当前线程的变量值,这样你想获取该变量的值的时候,获取到的都是本线程的变量值,不会获取到其他线程设置的值。应用场景比如:在过滤器中使用threadlocal保存变量值,需要使用的时候直接取出来即可,threadlocal可以保证你取到的数据就是你之前设置的,因为在一个线程中。

【编辑推荐】

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

点赞 0

java线程安全的方法_Java实现线程安全的方式相关推荐

  1. java实现线程同步的方法_Java实现线程同步方法及原理详解

    一.概述 无论是什么语言,在多线程编程中,常常会遇到多个线同时操作程某个变量(读/写),如果读/写不同步,则会造成不符合预期的结果. 例如:线程A和线程B并发运行,都操作变量X,若线程A对变量X进行赋 ...

  2. java 线程同步的方法_Java多线程同步方法

    Java多线程同步方法 package com.wkcto.intrinsiclock; /** * synchronized同步实例方法 * 把整个方法体作为同步代码块 * 默认的锁对象是this对 ...

  3. java多线程优先级的方法_Java多线程以及线程优先级

    文章目录 1 继承Thread类多线程的实现获取和设置线程名称线程优先级 2 实现Runnable接口3 实现Callable接口4 使用线程池 1 继承Thread类 多线程的实现 实现多线程只需要 ...

  4. JAVA中初始化线程的两种方法_java中最简单的方式新起一个线程

    启动一个线程 在一个方法中启动一个线程,有两种方法 第一种是让类实现Runable接口,这样的话编译器就会提示你实现里面的未实现的方法(就是run方法) 第二种是,现在方法中new一个线程,然后直接调 ...

  5. java线程的实现方法_Java多线程的四种实现方式

    1.Java多线程实现的方式有四种: 1.继承Thread类,重写run方法 2.实现Runnable接口,重写run方法,实现Runnable接口的实现类的实例对象作为Thread构造函数的targ ...

  6. java 线程池的使用_Java 使用线程池执行若干任务

    在执行一系列带有IO操作(例如下载文件),且互不相关的异步任务时,采用多线程可以很极大的提高运行效率.线程池包含了一系列的线程,并且可以管理这些线程.例如:创建线程,销毁线程等.本文将介绍如何使用Ja ...

  7. java中线程池的使用_Java中线程池的简单使用

    什么是线程池? 顾名思义线程池就是线程的容器 举个例子:在没有共享电源的年代,车站有5个人手机都没电且都没有带电源,这五个人想要给手机充电只能去车站的售货亭各花100块钱买一个移动电源:但是现在共享电 ...

  8. java 并发测试main方法_Java并发测试

    要求:模拟200个设备,尽量瞬间并发量达到200. 思路 第一种:线程池模拟200个线程--wait等待线程数达200--notifyAll唤醒所有线程 第二种:线程池模拟200个线程--阻塞线程-- ...

  9. java并发执行一个方法_JAVA的执行并发原理

    Volatile Volatile关键字用于确保共享数据的可见性与有序性,但是并不能保证方法的原子性,在程序中对Volatile关键字使用得当的话,它比synchronized的使用和执行成本会更低, ...

最新文章

  1. 『原创』网站测试计划模板
  2. oracle backup arch,一个数据库备份的例子
  3. 详解各类以太网标准10BASE-T/100BASE-T4/100BASE-FX/1000BASE-X等
  4. 马云:未来无工可打,人工智能发展红利还在10年以后
  5. 撸个微信小程序的省市区选择器
  6. 浅析Kerberos原理,及其应用和管理
  7. Web For Pentester -- File Upload
  8. 雅虎年底升级IPv6标准 100万用户恐受影响
  9. 突破边界局限,阿里云神龙负责人张献涛分享15年虚拟化之路
  10. 查询各个科目成绩前三的记录
  11. uniapp前端处理接口返回一整个html格式
  12. LCA Tarjan
  13. Windows下安装elastic search
  14. JavaScript 设计模式之-单例模式(Singleton Pattern)
  15. 凸性与久期在python中实现
  16. H5链接分享给微信好友,显示标题、描述、缩略图
  17. 奶爸日记21 - 探险乐园
  18. 2022最新可用免费天气预报API接口
  19. 基于PHP的精品课程教学网站
  20. 红米5 Android 8.0,红米 5 获得 Android 8.0 稳定版更新:修复大量问题

热门文章

  1. html5表单新特性
  2. android 充电图标
  3. Linux下C语言开发(信号signal处理机制)
  4. Hasp HL加密狗模拟、解密硬复制Hasp HL
  5. 小米运动显示同步到服务器失败,小米运动登录失败怎么办 小米运动登录不了怎么回事-站长资讯中心...
  6. 虚拟机VMware安装苹果MacOS系统无法联网的解决方法 虚拟机MacOS无法联网解决
  7. java最少钱币数_最少钱币数(凑硬币)详解-2-动态规划算法(初窥)-CCF-CSP练习题(100)...
  8. Oracle认证考试详细介绍
  9. 以30字符宽居中输出python字符串_python基础--字符串
  10. spring boot创建新工程运行报错解决方案