精华内容
下载资源
问答
  • 什么是线程安全性?

    2016-05-25 23:15:00
    定义:当多个线程访问某个类时,这个类始终都能表现出正确的行为,那么久称这个类时线程安全的。 解释:当多个线程访问某个类时,不管运行时环境采用何调度方式或者这些线程将如何交替执行, 并且在主调代码中不...

    定义:当多个线程访问某个类时,这个类始终都能表现出正确的行为,那么久称这个类时线程安全的。

    解释:当多个线程访问某个类时,不管运行时环境采用何种调度方式或者这些线程将如何交替执行,

    并且在主调代码中不需要任何额外的同步或者协同,这个类都能表现出正确的行为,那么就称这个类是线程安全的。

     

    • 在线程安全类中封装了必要的同步机制,因此客户端无需进一步采取同步措施。

    实例:一个无状态的Servlet

    @ThreadSafe
    public class SafeThreadTest implements Servlet{
        public void service(ServletRequest req,ServletResponse resp){
            BigInteger i=extractFromRequest(req);
            BigInteger[] factors=factor(i);
            encodeIntoRespose(resp,factors);      
        }
    }

    这个Servlet将请求参数经过提取数值,然后转换后再封装到Servlet的响应中。

    这个Servlet与大多数的Servlet相同,SafeThreadTest是无状态的,它不包含包域,也不包含对其他类的域的引用。

    计算的过程中的局部变量只存在执行的线程的栈上,访问SafeThreadTest不会影响同一访问该Servlet的另一个线程

    的计算结果。所以无状态的对象一定是线程安全的。

     

    实例:一个有状态的Servlet

    @NotThreadSafe
    public class UnsafeThreadTest implements Servlet{
        private long count=0;
    
        public long getCount(){return count;}
    
        public void service(ServletRequest req,ServletResponse resp){
            BigInteger i=extractFromRequest(req);
            BigInteger[] factors=factor(i);
            count++;
            encodeIntoRespose(resp,factors);      
        }
    }

       我们增加一个统计请求数量,给这个Servlet增加了一个状态,UnsafeThreadTest并非是一个线程安全的,尽管它在单线程中能正确运行。

    这个类很可能丢失一些更新操作,看上去这是一个操作,但是这个操作丢失了原子性。实际上它包含了三个独立的操作:读取count,将值+1,

    然后将结果写入count,这是一个“读取-->修改-->写入”的操作序列,并且其结果取决于之前的状态 。

      如果在某些情况下,多个线程同时读取到值为10,当都加1,写入11.这样数值将会偏差好多。在并发编程中,这种由于不恰当的执行时序而出现

    不正确的结果是一种非常重要的情况,它有一个正式的名字:竞争条件(Race Codition)

    竞争条件:当某个计算的正确性取决于多个线程的交替执行时序时,那么就会发生竞争条件(就是说正确的结果要取决于运气)。最常见的竞争类型就是

    “先检查后执行(Check-Then-Act)操作”,即通过一个可能失效的观测的结果来决定于下一步动作。

     

    实例:延迟初始化中的竞争条件

    @NotThreadSafe
    public class LazyInitRace{
      private ExprensiveObject instance =null;
    
      public   ExprensiveObject getInstance(){
        if(instance==null)
            instance=new ExprensiveObject();
            return instance;
        }
    
    }    

    如果两个线程同时执行,都产生一个实例,这样实例完全不同了。与大多数并发错误一样,竞争条件并不是总是产生错误的,还需要某种不恰当的执行时序。

     

    复合操作:以上的两个含有竞争条件的实例,都需要包含一组需要以原子方式执行(或者说不可分割)的操作。

    原子性操作:操作A和B,如果从执行A的线程来看,当另一个线程执行B,要么将B完全执行完,要么完全不执行B,那么A和B对彼此来说是原子的。

     

    我们使用AtomicLong类型变量来统计已经处理请求数量

    @ThreadSafe
    public class CountSafeThreadTest implements Servlet{
        private final AtomicLong count=new AtomicLong(0);
    
        public long getCount(){return count.get();}
    
        public void service(ServletRequest req,ServletResponse resp){
            BigInteger i=extractFromRequest(req);
            BigInteger[] factors=factor(i);
            count.incrementAndGet();
            encodeIntoRespose(resp,factors);      
        }
    }

    AtomicLong以用原子方式更新的 long 值。有关原子变量属性的描述,请参阅 java.util.concurrent.atomic 包规范。

    在实际情况中,应该尽可能使用现有的线程安全类来管理类的状态。

     

    加锁机制:当在Servlet中添加一个状态变量时,可以通过线程安全的对象来管理Servlet的状态来维护Servlet的线程安全性,如果想在Servlet添加更多的状态,那么是否只需要

    添加更多的线程安全状态变量就足够了?

      要保持状态的一致性,就需要在单个原子操作中更新所有相关的状态变量。

     

    内置锁:java提供了一种内置的锁机制来支持原子性:同步代码块。

    (1)以synchronized来修饰的方法就是横跨整个方法体的同步代码块,其中该同步代码块的锁就是方法调用所在对象。

    (2)静态的synchronized方法以Class对象作为锁。(在类加载时,HotSpot虚拟机是在方法区产生java.lang.Class对象)

      synchronized(lock){//访问或修改由锁保护的共享的状态}

    每个java对象都可以用作一个实现同步锁,这些锁被称为内置锁或监视器锁。线程进入同步代码块之前会自动获得锁,并且在退出同步代码块时自动释放锁。

    获取内置锁的唯一途径就是进入这个锁保护的同步代码块或同步方法。java的内置锁相当于一种互斥体,最多只有一个线程持有这个锁。由于每次只有一个

    线程执行内置锁保护的代码块。因此,由这个锁保护的同步代码块会以原子性方式执行。并发环境中的原子性和事务应用程序中的原子性有着相同的含义:

    一组语句作为一个不可分割的单元被执行。

     

    重入:当某个线程请求一个由其它线程持有的锁时,发出请求的线程的就会阻塞。然而,由于内置锁是可以重入的,因此如果某个线程试图获得一个已经有它自己持有

    的锁,那么这个请求就会成功。“重入”意味着获取锁的操作粒度是“线程”,而不是调用。

     

    于可能被多个线程同时访问的可变状态变量时,在访问它时需要持有同一个锁,在这种情况下,我们称这个状态变量时由这个锁保护的。

    每个共享的和可变的变量都应该只由一个锁来保护,从而使维护人员知道是哪一个锁。

    对于每个包含多个变量的不变性条件,其中涉及的所有变量都需要同一个锁来保护。

    当执行较长时间的计算或者无法快速完成的操作时(例如:网络I/O或者控制台I/O),一定不要持有锁。

     

    转载于:https://www.cnblogs.com/LvLoveYuForever/p/5528972.html

    展开全文
  • 根据定义,SDN是一种计算机联网方法,它允许网络管理员通过抽象高级功能来管理网络服务。SDN管理网络基础设施。这是通过将决定通信量发送到何处(控制平面)系统与将通信量转发到选定目的地(数据

    软件定义网络(SDN)或软件定义周长(SDP)有什么区别

    软件定义边界SDP和软件定义的网络是一样的吗?这是让人困惑的,因为软件定义边界(SDP)是新的,而软件定义网络(SDN)正在建立。它们可以一起使用,也可以单独使用,并且在我们专注于重塑网络、安全设计和架构,以改善IT安全日益恶化的状态时,两者都将发挥重要作用。
    根据定义,SDN是一种计算机联网的方法,它允许网络管理员通过抽象高级功能来管理网络服务。SDN管理网络基础设施。这是通过将决定通信量发送到何处(控制平面)的系统与将通信量转发到选定目的地(数据平面)的底层系统解耦来实现的。它是动态的、可管理的、经济有效的和适应性强的,这使得它非常适合当今应用程序的高带宽、动态特性。
    SDP也被称为乌云(black cloud),是一种计算机安全的新方法,由美国国防信息系统局(DISA)在2007年全球信息网格(GIG)黑核网络倡议下完成的工作演变而来,现在被云安全联盟CSA作为其成员采用。SDP保护所有连接到网络基础设施上运行的服务的安全。
    SDP的特征为:
    1)将建立信任的控制平面和传输数据的数据平面分离;
    2)动态全拒绝策略防火墙(Deny-all-FW)隐藏基础架构,丢弃所有未授权访问并记录和分析相关数据;
    3)通过单包授权SPA协议认证和授权用户及设备能否访问受保护的服务,最小授权原则在SPA中是自带的。
    SDP是已被证明的零信任实践方案,应用于ISO OSI模型的第三层,将先连接后验证改为先验证后链接。
    SDP中的连通性基于一个需要知道的模型,在该模型中,在授予访问应用程序基础设施之前,对设备的状态和身份进行验证。应用程序基础设施实际上是不可见的(国防部术语,意思是基础设施不能被检测到),没有可见的DNS信息或IP地址。SDP减轻了最常见的基于网络的攻击,特别适用于防止分布式拒绝服务(DDoS)攻击。
    SDN改变了传统网络思想,在逻辑层面将控制平面与数据平面分离,实现网络设备的集中化管理和网络的可编程性,可自定义路由路径,实现数据传输可控。OpenFlow协议族是SDN的核心所在。在不改变网络设备的条件下,SDN可以通过控制平面动态调整网络传输带宽分配给高承压设备,屏蔽故障设备,快速下发策略,告警网络泛洪并引流等,有效提升网络效率。
    	 所以SDN的概念是指建立一个动态的网络基础设施,让用户以尽可能多的吞吐量,快速、高效地进行点对点连接,SDP建立了一种能力,基于客户(业务所有者)定义和建立的安全级别来保护网络所有层上的每个连接。
    SDP解决了各种不同的安全控制,适用于各种行业,特别是那些高度管制的行业。它们是理想的协同工作,以优化SDN的安全性,但它们也可以很容易地部署来保护传统的、遗留的网络。
    虽然SDP是一种新的架构,但是已经有一些大型商业应用在像古柯、马自达、谷歌等工业巨头的公共部门中,DHS正在开发行业的第一个SDP开源版本。它已经被证明是100%有效的,因为世界上最优秀的黑客挑战SDP马拉松攻击均以失败告终。
    要了解更多信息,请查看我们从防止DDoS攻击的角度来研究SDP的白皮书。
    

    引用:https://www.waverleylabs.com/software-defined-network-sdn-or-software-defined-perimeter-sdp-whats-the-difference/

    展开全文
  • OCSP是什么

    2021-03-15 10:29:03
    OCSP(Online Certificate Status Protocol)即在线证书状态协议,是一个互联网协议,用于获取符合X.509标准数字证书的状态。OCSP是维护服务器和其它网络资源安全普遍模式之一。OCSP协议产生是用于在公钥...

    OCSP的定义

    OCSP(Online Certificate Status Protocol)即在线证书状态协议,是一个互联网协议,用于获取符合X.509标准的数字证书的状态。OCSP是维护服务器和其它网络资源安全性的两种普遍模式之一。OCSP协议的产生是用于在公钥基础设施(PKI)体系中替代证书吊销列表(CRL)来查询数字证书的状态,当用户试图访问一个服务器时,在线证书状态协议发送一个对于证书状态信息的请求。服务器回复一个“有效”、“过期”或“未知”的响应。

    OCSP与CRL比较:

    1)与CRL相比OCSP消息中信息内容更少,这能减少网络的负担和客户端的资源;

    2)由于OCSP响应端需要解析的信息更少,客户端提供的用于解析消息的库函数更简单;

    3)OCSP向发起响应方公开了一个特定的网络主机在特定时刻所使用的特定证书。由于OCSP并不强制加密该证书,因此信息可能被第三方拦截。

    基本PKI应用场景
    在这里插入图片描述

    1、Alice和Bob使用GDCA颁发的数字证书。该场景中GDCA是数字证书认证中心CA机构;

    2、Alice向Bob发送其由GDCA颁发的数字证书,并发出请求建立连接的申请;

    3、Bob担心Alice的私钥已经泄露,因此向GDCA发送’OCSP request’ 消息并包含Alice的数字证书序列号;

    4、GDCA的OCSP响应端从Bob发送的消息中获取数字证书的序列号,并在CA数据库中查找该数字证书的状态;

    5、GDCA向Bob发送由其私钥加密的消息’OCSP response’,并包含证书状态正常的信息;

    6、由于Bob事先已经安装了GDCA的数字证书,因此Bob使用Ivan的公钥解密消息并获取到Alice的数字证书状态信息;

    7、Bob决定与Alice进行通信

    展开全文
  • 前言 在进入今天主题前,先简单地...位图最大优势是有时是一种非常显著节省空间来存储信息方式。例如,在一个系统中,不同用户由递增用户 ID 来表示,可以使用 512MB 内存来表示 400 万用户单个位信息
  • 什么是VLAN

    2013-10-23 09:59:12
     IP 组播实际上也是一种VLAN的定义,即认为一个组播组就是一个VLAN,这种划分的方法将VLAN扩大到了广域网,因此这种方法具有更大的灵活性,而且也很容易通过路由器进行扩展,当然这种方法不适合局域网,主要是效率...
  • 什么是枚举枚举类型是java 5新增特性一部分,它是一种特殊数据类型,它既是一种类又比类多了些特殊约束,但也是这些特殊约束造就了枚举类型简洁性、安全性以及便捷性。为什么要使用枚举使用枚举会更加直观...

    什么是枚举

    枚举类型是java 5新增特性的一部分,它是一种特殊的数据类型,它既是一种类又比类多了些特殊的约束,但也是这些特殊的约束造就了枚举类型的简洁性、安全性以及便捷性。

    为什么要使用枚举

    使用枚举会更加直观、方便。比如涉及到一些状态的操作比较耳熟能详的方式为定义几个常量,然后if判断常量值来返回对应的状态,这样非常不利于阅读以及后期扩充。

    枚举的使用

    public class TestEnum{

    public static void main(String[] args) {

    OrderStatus ost = OrderStatus.ONE;

    System.out.println(ost.getInfo());

    }

    }

    enum OrderStatus{

    //定义枚举的值

    ZERO(0,"已取消"),ONE(1,"待付款"),TWO(2,"已付款"),TREE(3, "取消");

    private int state;

    private String info;

    //构造方法(枚举的构造方法只允许private类型)

    private OrderStatus(int state, String info){

    this.state = state;

    this.info = info;

    }

    public int getState(){

    return state;

    }

    public String getInfo(){

    return info;

    }

    }

    #执行结果

    待付款

    枚举的应用场景远不止以上所说,有什么不对或者更优的使用方式欢迎指点

    展开全文
  • 死锁指两个或两个以上线程在执行过程中,由于竞争资源或者由于彼此通信而造成的一种阻塞现象,若无外力作用,它们都将无法推进下去。此时称系统处于死锁状态或系统产生了死锁,这些永远在互相...
  • 枚举类型是Java 5中新增特性一部分,它是一种特殊数据类型,之所以特殊是因为它既是一种类(class)类型却又比类类型多了些特殊约束,但是这些约束存在也造就了枚举类型简洁性、安全性以及便捷性。...
  • 线程安全

    2012-12-10 09:42:04
    如果一个类实现正确(这说它符合规格说明一种方式),那么没有一种对这个类对象操作序列(读或者写公共字段以及调用公共方法)可以让对象处于无效状态,观察到对象处于无效状态、或者违反类任何不可变量、...
  • 单点登录即SSO(Single Sign-On),是一种统一认证和授权机制,指访问同一服务器不同应用中受保护资源同一用户,只需要登录一次,即通过一个应用中的安全验证后,再访问其他应用中受保护资源时,不需要重新...
  • 当多个线程访问某个类时,不管运行时环境采用何调度方式或者这些线程将如何交替执行,并且在调用代码中不需要任何额外的同步或者协同,这个类都能表现出正确的行为,那么就称这个类线程安全的。 如何做到线程...
  • 全称为Json Web Token (JWT),是目前最流行跨域认证解决方案,是在网络应用环境间传递声明而执行一种基于JSON开放标准((RFC 7519),JWT 是一种JSON风格轻量级授权和身份认证规范,可实现无状态、分布式...
  • 要编写线程安全的代码,核心在于对状态的访问操作进行管理,特别对共享的和可变的状态的访问。共享,表示可以由多个线程同时访问;可变,表示变量的值在其生命周期内可以发生变化。 Java 中的主要同步机制...
  • 在实际使用中,枚举类型也可以作为一种规范,保障程序参数安全。枚举有以下特点: Java中枚举和类、接口级别相同。 枚举和类一样,都有自己属性、方法、构造方法,不同点:枚举构造方法只能private...
  • 二十三设计模式【PDF版】

    热门讨论 2011-05-30 14:13:49
    GoF 设计模式表面上好象也是一种具体"技术",而且新设计模式不断在出现,设计模式自有其自己发展轨道,而这 些好象和 J2EE .Net 等技术也无关! 实际上,GoF 设计模式并不是一种具体"技术",它讲述是...
  • Ajax安全技术.pdf

    2018-10-18 14:34:15
    4.4.2Web服务的定义82 4.5AJAX应用程序的攻击层面83 4.5.1AJAX应用程序攻击层面的来源84 4.5.2黑客的最爱86 4.6正确的输入验证86 4.6.1有关黑名单及其他补丁的问题87 4.6.2治标不治本90 4.6.3白名单输入验证93 4.6.4...
  • 《Android软件安全与逆向分析》由浅入深、循序渐进地讲解了Android系统软件安全、逆向分析与加密解密技术。包括Android软件逆向分析和系统安全方面必备知识及概念、如何静态分析Android软件、如何动态调试...
  • 数据库管理系统(Database Management System)是一种操纵和管理数据库大型软件,用于建立、使用和维护数据库,简称DBMS。 它对数据库进行统一管理和控制,以保证数据库的安全性和完整性。 用户通过DBMS访问...
  • 每日一句:学习永无止境 本文内容:什么是反序列化漏洞 ... 类就是代表一种物体总称,比如猫类,狗类,鱼类等等 对象就是类具体体现,比如狗类拉布拉多犬 举例: 人这个“类”,张三类具体人,
  • 类就是代表一种物体总称,比如猫类,狗类,鱼类等等 对象就是类具体体现,比如狗类拉布拉多犬 举例: 人这个“类”,张三类具体人,即对象 这里类就是“人”,张三就是“对象” ~类得...
  • JWT,全称是Json Web Token, 是一种JSON风格轻量级授权和身份认证规范,可实现无状态、分布式Web应用授权。它是基于 RFC 7519 标准定义的一种可以安全传输 小巧 和 自包含 JSON对象。由于数据是使用数字...
  • 你必须知道495个C语言问题

    千次下载 热门讨论 2015-05-08 11:09:25
    到底指针是一种数组,还是数组是一种指针? 6.11 我看到一些“搞笑”代码,包含5["abcdef"]这样“表达式”。这为什么是合法C语言表达式呢? 数组指针 6.12 既然数组引用会退化为指针,如果array是数组...
  • DTD是一种保证XML文档格式正确的有效方法,可以比较XML文档和DTD文件来看文档是否符合规范,元素和标签使用是否正确。一个DTD文档包含:元素的定义规则,元素间关系的定义规则,元素可使用的属性,可使用的实体或...
  •  异常表示程序运行过程中可能出现非正常状态,运行时异常表示虚拟机通常操作中可能遇到异常,是一种常见运行错误。java编译器要求方法必须声明抛出可能发生非运行时异常,但是并不要求必须声明抛出未被捕获...
  • 换句话说:线程安全是一个多线程环境下正确性概念,也就是保证多线程环境下共享、可修改的状态的正确性,这里的状态反映在程序中其实可以看作是数据。 tips: 1.在线程安全类中封装了必要同步机制,因此客户端...
  • 到底指针是一种数组,还是数组是一种指针?  6.11 我看到一些“搞笑”代码,包含5["abcdef"]这样“表达式”。这为什么是合法C语言表达式呢?  数组指针  6.12 既然数组引用会退化为指针,如果array是...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 389
精华内容 155
关键字:

安全的定义是一种什么状态