`

如何保证线程安全 实现线程安全有那些方法

 
阅读更多

1,如何保证线程安全

不在线程之间共享状态变量

将状态变量修改成不可变的变量

在访问状态变量时使用同步

 

2,实现线程安全有那些方法

A:内置锁

public class widget{

    public synchronized void doSomething(){

       .....
    }

}

public class LoggingWidget extends Widget{

    public synchronized void doSomething(){

       System.out.println(toString()+":calling do Something");
       super.doSomething();

    }

}

 这个时候子类同步调用父类方法是可行,因为内置锁是可以被重入的,也就是子类可以获取到父类的锁,才不会造成死锁。

 

3,使用java.util.concurrent包中定义的并发类 如 

      ConcurrentHashMap

      ConcurrentLinkedQueue

      ConcurrentSkipListMap

      等等

      但是他们支持的并发实现并不一定意味着操作的原子性,他们只是保证数据结构不被破坏

 

4,添加volatile关键字

private static volatile int value=0;//你可以添加volatile关键字 然后删除synchronized关键字,但是也要看你的业务

public static void setTvalue(int n){
    value=n//这个时候,如果value+=n语句,那么这个就不是原子操作,还是要用synchronized的
}

 5,同步语句的注意

      你可以使用一个对象来标记同步块,不要使用this,因为this可能代表当前的类,this造成同步的区域是整个类,其他对象就无法调用类中不是同步的方法了,需要等待锁从this指的类中释放才能进行了。所以你可以定义一个对象,然后让同步块的锁指向整个对象来缩小同步块的锁影响范围。

       

private Object myLock=new Object();

public void add (int a ){

    synchronized(myLock){
     
        v+=a;
    }
}

 

 6,不要在同步块中调用其他的同步块

     这句话不是绝对的,如果你很了解代码的同步,锁,等信息,你可以大胆的这么做

分享到:
评论

相关推荐

    c# 线程安全队列的用法原理及使用示例

    在拥有共享数据的多条线程并行执行的程序中,线程安全的代码会通过同步机制保证各个线程都可以正常且正确的执行,不会出现数据污染等意外情况。 在多线程并行的情况下会出现共享数据会线程间读取与写入不一直的情况...

    java多线程安全性基础介绍.pptx

    java多线程安全性基础介绍 线程安全 正确性 什么是线程安全性 原子性 竞态条件 i++ 读i ++ 值写回i 可见性 JMM 由于cpu和内存加载速度的差距,在两者之间增加了多级缓存导致,内存并不能直接对cpu可见。 ...

    Java多线程与线程安全实践-基于Http协议的断点续传的实现.rar

    在下载过程中处理线程同步和资源释放,确保线程安全性和资源的正确释放。 异常处理:在实现过程中需要考虑各种异常情况,如网络连接异常、文件IO异常等,需要进行适当的异常处理和错误提示,保证程序的稳定性和可靠...

    c_safe_lib:c数据结构线程安全库

    c_safe_lib c线程安全库,这个项目的目的是创造...为了保证线程安全库中使用了互斥锁,这可能会影响效率,但已经尽可能减小锁粒度。Note:This library supports linux and windows, but windows does not have time to t

    C++两种线程安全的单例模式的实现

    使用"懒汉模式"与"饿汉模式"实现c++的单例模式,并且确保了单例模式的第一次实例化的线程安全,以及程序结束时,单例对象的资源收回,以防内存资源的泄漏

    python线程安全及多进程多线程实现方法详解

    什么是线程安全 一个线程的修改被另一个线程的修改覆盖掉。 python中哪些操作是线程安全的 一个操作可以在多线程环境中使用,并且获得正确的结果。 线程安全的操作线程是顺序执行的而不是并发执行的。 一般涉及...

    当析构函数遇到多线程── C++ 中线程安全的对象回调

    这也是实现线程安全的 Observer 模式的必备技术。 本文源自我在 2009 年 12 月上海 C++ 技术大会的一场演讲《当析构函数遇到多线程》,内容略有增删。原始 PPT 可从 http://download.csdn.net/source/1982430 下载。...

    Java多线程与线程安全实践-基于Http协议的断点续传.zip

    在这个项目中,我们将学习如何使用Java多线程技术来加速文件的下载和上传,同时保证线程安全。 该项目在实现断点续传时,使用了Http协议的Range头部信息来实现文件的分段下载和上传。这样做能够提高文件传输的效率...

    基于C++实现(控制台)实现链表的插入、删除、打印等操作的函数(线程安全型数据结构)【100012475】

    为实现保证线程安全的链表,本系统需要实现以下几个功能: 用C语言设计链表这一数据结构,实现链表的插入、删除、打印等操作的函数,并保证其正确性。 设计一个测试函数实现对定义好的链表数据结构进行健壮性测试...

    Java毕业设计-Java多线程与线程安全实践-基于Http协议的断点续传.rar

    Java多线程与线程安全实践-基于Http协议的断点续传.rar 是一个Java毕业设计项目,旨在探讨如何在Java中实现多线程下载和断点续传功能,同时确保线程安全。该项目的主要特点如下: 1. 多线程下载:项目采用了Java的...

    Java多线程与线程安全实践-基于Http协议的断点续传.rar

    该项目旨在通过实现一个基于HTTP协议的文件断点续传功能,深入探索和实践Java多线程编程以及线程安全的关键技术。在这个项目中,开发者将学习如何利用Java的并发工具如Thread类和Runnable接口来创建和管理多个线程,...

    当析构函数遇到多线程── C++ 中线程安全的对象回调 PDF

    这也是实现线程安全的 Observer 模式的必备技术。 本文源自陈硕在 2009 年 12 月上海 C++ 技术大会的一场演讲《当析构函数遇到多线程》,内容略有增删。原始 PPT 可从 http://download.csdn.net/source/1982430 下载...

    多线程操作窗口源码2012813

    在.NET Framework中,为了保证线程安全,避免出 现访问竞争等问题,是不允许跨线程访问窗体控件的。 如果强行访问,则会引发InvalidOperationException 无效操作异常 为了实现跨线程访问控件,.NET Framework为每...

    mfc实现多线程工程代码和线程进程查看软件

    使用MFC实现多线程的创建和终止,通过线程自身函数退出,保证内存不会泄露,安全可靠

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

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

    什么是线程?Java中如何创建和管理线程?(java面试题附答案).txt

    通过将 MyRunnable 对象传递给 Thread 类的构造方法,我们创建了一个新的线程,并将 run 方法...通过合理地创建和管理线程,我们可以实现复杂的并发执行逻辑,提高程序的性能和响应能力,并确保线程之间的安全和协调。

    C#线程锁介绍源码

    这 条是最根本的东西,开发完全线程安全的程序是件很费时费力的事情,在电子商务等涉及金融系统的案例中,许多逻辑都必须严格的线程安全,所以我们不得不牺牲 一些性能,和很多的开发时间来做这方面的工作。...

Global site tag (gtag.js) - Google Analytics