`
gaosililn
  • 浏览: 70136 次
  • 性别: Icon_minigender_1
社区版块
存档分类
最新评论

Java中,对多线程访问同一变量(并发访问)的认识

    博客分类:
  • Java
阅读更多

在Java中,如果启动多个线程对同一个对象或者变量时候,在没有安全保护前提下有可能会抛出并异常

java.util.ConcurrentModificationException

当方法检测到对象的并发修改,但不允许这种修改时,抛出此异常(并发异常)

解决方法:

  • 在对象/变量前加上volatileVolatile修饰的成员变量在每次被线程访问时,都强迫从共享内存中重读该成员变量的值。而且,当成员变量发生变化时,强迫线程将变化值回写到共享内存。这样在任何时刻,两个不同的线程总是看到某个成员变量的同一个值。Java语言规范中指出:为了获得最佳速度,允许线程保存共享成员变量的私有拷贝,而且只当线程进入或者离开同步代码块时才与共享成员变量的原始值对比。这样当多个线程同时与某个对象交互时,就必须要注意到要让线程及时的得到共享成员变量的变化。而volatile关键字就是提示JVM:对于这个成员变量不能保存它的私有拷贝,而应直接与共享成员变量交互。使用建议:在两个或者更多的线程访问的成员变量上使用volatile。当要访问的变量已在synchronized代码块中,或者为常量时,不必使用。由于使用volatile屏蔽掉了JVM中必要的代码优化,所以在效率上比较低,因此一定在必要时才使用此关键字
  • 将对象/变量加上锁synchronized修饰。在线程中,使用同步方法或者同步块。
  • 使用带有线程安全的线程。如:继承TimerTask类实现线程,用Timer.schedule启动线程 

 

 

1
0
分享到:
评论

相关推荐

    java学习多线程处理

    多线程开发的优势:改善用户体验,提高资源利用率(单线程的处理效率低下) 线程的使用步骤:定义一个线程,创建线程的实例,启动线程,终止线程 主线程:(java中所有的线程都是java.lang.Thread类或者其子类的一...

    基于Java多线程同步的安全性研究

    解决Java多线程同步的方法是在需要同步的方法签名中加入synchronized关键字,...为解决多个线程对同一变量进行访问时可能发生的安全性问题,不仅可以采用同步机制,更可以通过JDK中加入的ThreadLocal来保证更好的并发性。

    python多线程DAY05.txt

    多进程/多线程并发 : 任何任务 3. 基于fork的多进程并发程序 每当有一个客户端连接就创建一个新的进程 4. ftp文件服务程序 *********************************************** 多线程并发 threading 的多...

    线程安全在Java中的应用与实践.pptx.pptx

    synchronized关键字是Java提供的一种内建的同步机制,它可以确保同一时刻最多只有一个线程执行该段代码,从而保证线程安全。 volatile关键字 volatile关键字可以保证变量的可见性,当一个线程修改了volatile变量的值...

    Java中volatile关键字的含义

    在java线程并发处理中,有一个关键字volatile的使用目前存在很大的混淆,以为使用这个关键字,在进行多线程并发处理的时候可以万事大吉。  Java语言是支持多线程的,为了解决线程并发的问题,在语言内部引入了 ...

    第九讲:分布式锁的原理及应用&秒杀设计实现.pdf

    单进程的系统中,存在多线程同时操作一个公共变量,此时需要加锁对变量进行同步操作,保证多线程 的操作线性执行消除并发修改。解决的是单进程中的多线程并发问题。 2)分布式锁: 只要的应用场景是在集群模式的多个...

    java乐器源码-concurrency:Java并发编程知识梳理以及常见处理模式featuresandpatterns

    java乐器源码 ...一个线程对共享变量的修改,另外一个线程能够立刻看到,我们称为可见性 线程切换带来的原子性问题 一个或者多个操作在 CPU 执行的过程中不被中断的特性称为原子性 时间片概念 线程切换 ---〉

    leetcode赛车-Concurrency:#JAVA#并发

    如果一个线程频繁调用这个方法,其他同样需要频繁同步访问同一对象的线程也会经常被阻塞。 活锁 一个线程通常会响应另一个线程的操作。 如果另一个线程的动作也是对另一个线程动作的响应,则可能会导致活锁。 与死锁...

    java-concurrency-in-practice:Brian Goetz的“实践中的Java并发性”一书中的注释和示例

    实践中的Java并发 ... 可以在多个CPU上同时调度同一程序中的多个线程。 线程有时称为轻量级进程,现代OS通常将它们视为调度的基本单位。 线程的好处 线程可以提高复杂应用程序的性能。 线程在GUI应用程序

    超爽的自学课件(java)

    <br>(14) 第14章:多线程 Java提供了一套内建的机制,可提供对多个并发子任务的支持,我们称其为“线程”。这线程均在单一的程序内运行。除非机器安装了多个处理器,否则这就是多个子任务的唯一运行方式。...

    Java并发编程实战 03互斥锁 解决原子性问题

    同一时刻只有一个线程执行这个条件非常重要,我们称为互斥,如果能保护对共享变量的修改时互斥的,那么就能保住原子性。 简易锁 我们把一段需要互斥执行的代码称为临界区,线程进入临界区之前,首先尝试获取加锁,若...

    net学习笔记及其他代码应用

    internal: 在同一命名空间内可以访问。 2 .列举ASP.NET 页面之间传递值的几种方式。 答. 1.使用QueryString, 如....?id=1; response. Redirect().... 2.使用Session变量 3.使用Server.Transfer 3. 一列数的规则...

    c#学习笔记.txt

    volatile指示字段可由操作系统、硬件或并发执行的线程等在程序中进行修改。 9,语句 语句是程序指令。除非特别说明,语句都按顺序执行。C# 具有下列类别的语句。 类别C# 关键字 选择语句if, else, switch, case 迭代...

    JMeter操作手册大全.docx

    并发用户数指在同一时刻内,打开系统并进行业务操作的用户数量,并发用户数对于长连接(数据库连接时长连接,web请求时短连接)系统来说最大并发用户数即是系统的并发接入能力。对于短连接系统而言最大并发用户数并不...

    二十三种设计模式【PDF版】

    会 Java 的人越来越多,但是一直徘徊在语言层次的程序员不在少数,真正掌握 Java 中接口或抽象类的应用不是很多,大家 经常以那些技术只适合大型项目为由,避开或忽略它们,实际中,Java 的接口或抽象类是真正体现 ...

    Eclipse权威开发指南2.pdf

    2.4.3 在Eclipse中运行多窗口和多工作空间..... 51 2.4.4 改变键盘快捷键..... 54 2.4.5 定制JRE... 55 2.4.6 在Eclipse中使用其他计算机程序..... 55 2.4.7 性能..... 60 2.5 练习概述...... 61 2.6 本章小结.......

    asp.net知识库

    利用反射来查看对象中的私有变量 关于反射中创建类型实例的两种方法 ASP.Net应用程序的多进程模型 NET委托:一个C#睡前故事 [推荐] - [原创] Microsoft .NET策略及框架概述 卸载Class? Web Form 窗体 如何实现web...

    Eclipse权威开发指南3.pdf

    2.4.3 在Eclipse中运行多窗口和多工作空间..... 51 2.4.4 改变键盘快捷键..... 54 2.4.5 定制JRE... 55 2.4.6 在Eclipse中使用其他计算机程序..... 55 2.4.7 性能..... 60 2.5 练习概述...... 61 2.6...

    Eclipse权威开发指南1.pdf

    2.4.3 在Eclipse中运行多窗口和多工作空间..... 51 2.4.4 改变键盘快捷键..... 54 2.4.5 定制JRE... 55 2.4.6 在Eclipse中使用其他计算机程序..... 55 2.4.7 性能..... 60 2.5 练习概述...... 61 2.6...

Global site tag (gtag.js) - Google Analytics