`
hikin
  • 浏览: 266073 次
  • 性别: Icon_minigender_1
  • 来自: 上海
文章分类
社区版块
存档分类
最新评论

java 线程安全 safety failure & liveness failure

阅读更多

 

   1. import java.util.concurrent.TimeUnit;  
   2. public class SafeFail {  
   3.     private volatile static int nextNum = 0;  
   4.     public static void main(String[] args) throws InterruptedException {  
   5.         for (int i = 0; i < 10; i++) {  
   6.             Thread t = new Thread(new Runnable() {  
   7.                 public void run() {  
   8.                     while (nextNum < 2000) {  
   9.                         int t = getNext();  
  10.                         System.out.println(t);  
  11.                     }  
  12.                 }  
  13.             }, "name_" + i);  
  14.             t.start();  
  15.             TimeUnit.NANOSECONDS.sleep(1);  
  16.         }  
  17.     }  
  18.     public static int getNext() {  
  19.         return nextNum++;  
  20.     }  
  21. }  

 

1. ++  不是原子操作,执行两项操作。首先取值,然后写一个新值。如果第二个线程在取旧值与写新的值是读取,那么第二个线程就会返回相同的值。这是安全性失败,safety failure.

public class StopThread {
private static boolean stop;

main {
Thread t = new Thread ( new Runnable () {

run () {
int i=0;
while (!stop)
i++;
}
}) ;

t.start();

Thread.sleep(1);

stop = true;
}
}
 



你可能会期望t线程在一秒后停掉,然而,可能并不会如愿,因为主线程对stop所做的修改,并不能保证对t是可见的。没有同步,代码会被编译为
if (!stop)
while (true)
i ++;
结果是t线程不会停止。这个被称做活性失败。liveness failure。

转自:http://blog.csdn.net/viterming/archive/2010/11/15/6010609.aspx

分享到:
评论

相关推荐

    Java线程总结.pdf

    Java线程是Java语言中实现多线程编程的核心机制。在多任务操作系统中,多线程可以让不同的任务同时执行,提高程序的并发性和响应性。Java线程的创建和管理涉及多个知识点,包括线程的生命周期、线程的优先级、线程的...

    Java并发编程(学习笔记).xmind

    委托是创建线程安全类的最有效策略,只需要让现有的线程安全类管理所有的状态 在现有线程安全类中添加功能 将同步策略文档化 基础构建模块 同步容器类 分类 Vector Hashtable 实现...

    Java.Concurrency.in.Practice.pdf

    并发编程的风险包括安全性问题(Safety Hazards)、活跃性问题(Liveness Hazards)、性能问题(Performance Hazards)等。 ### 关于书籍和作者 《Java并发编程实践》由Addison-Wesley Professional出版,是一本...

    java oracle并发官方教程

    总结来说,Java的并发编程涉及进程和线程的概念、线程的创建和管理、线程同步机制、活跃度问题的解决方法、不可变对象的使用以及高级并发工具的应用等多个方面。掌握这些知识点对于编写高性能和高可用性的Java程序至...

    《Java Concurrency in Practice》代码示例

    - **Liveness and Safety**:包含了死锁、活锁、饥饿等并发问题的实例,以及避免和解决这些问题的方法。 2. **jcip-annotations-src.jar**: 这个jar文件提供了书中的自定义注解,用于标记和验证并发代码的安全性...

    Liveness-Detection-(AndroidX).zip

    2. 安全性提升:AndroidX的活体检测利用了硬件级别的安全特性,如TrustZone和Secure Element,确保生物特征数据的安全存储和处理。 3. 用户体验优化:通过自定义`BiometricPrompt`的提示信息和确认对话框,开发者...

    诊断 Java 代码: Java 编程中的断言和时态逻辑 另有翻译

    安全断言(Safety Assertions)确保不期望的状态永远不会出现,而生存断言(Liveness Assertions)则保证某些期望的事件最终会发生,如线程的唤醒。 时态逻辑的基础是模态逻辑,它允许推理随着时间变化的属性。在...

    liveness and safetiy properties

    在计算机科学领域,特别是软件工程与系统验证方面,**活动性(Liveness)**和**安全性(Safety)属性**是两个核心概念,用于描述系统的行为特性。这两种属性对于确保系统的正确性和可靠性至关重要。本文将基于提供的...

    Void A fast and light voice liveness detection system.pdf

    标题中提到的“Void: A fast and light voice liveness detection system”指的是一个快速、轻量级的声音活体检测系统,它被命名为“Void”。在声音活体检测的领域,这是一个重要而具体的研究课题,尤其是考虑到随着...

    java并发编程 英文版

    为了应对这些问题,需要妥善处理安全(Safety)、活跃性(Liveness)、组件化(Composition)等问题,并且可能会导致更高的资源使用率。 在常见的应用领域中,本书还提到了并行访问网页、数据库和套接字...

    A New Multispectral Method for Face Liveness Detection.

    随着3D打印技术的进步,伪造面部特征的技术也日益提高,因此迫切需要一个更强大的人脸活性检测方法来保障安全系统不受攻击。 在本文中,研究者们开发了一个基于两个光谱带的方法来进行真实面部与常见伪装面部的分类...

    活体检测方法调研,introduction_to_liveness_detection_liveness-detection-

    活体检测方法调研,introduction_to_liveness_detection_liveness-detection-introduction

    aws-liveness:AWS Liveness工具

    鲜活AWS Liveness工具。安装 npm i --save aws-liveness用法 const AWSLiveness = require ( 'aws-liveness' ) ;const { DynamoDB } = require ( 'aws-sdk' ) ;const awsLiveness = new AWSLiveness ( ) ;const ...

    Liveness-Detect:最简单的实时人脸识别API

    总结来说,Liveness-Detect是利用Python和Django REST框架构建的实时活体检测API,它为开发者提供了一种高效、安全的方法来实现实时人脸识别中的活体检测功能。通过理解这个项目的结构和工作原理,开发者可以进一步...

    Liveness-Detection(android.support) (1).zip

    本压缩包“Liveness-Detection(android.support) (1).zip”提供了一个高级的活体检测Android SDK,版本号为V1.3.3,它专门设计来增强应用程序的安全性和用户体验。 SDK(Software Development Kit)是软件开发者...

    FaceLivenessDetection.zip_live detectness_liveness_moonml3_活体人脸_

    该资源名为“live detectness_liveness_moonml3_活体人脸”,从名字中我们可以看出,它基于moonml3模型,这是一种专为活体检测设计的深度学习模型。 活体检测的核心在于分析和理解人脸图像的细微特征,包括皮肤纹理...

    LCPD.zip_LCPD_descriptor_image processing_liveness detection_pha

    在计算机视觉领域,图像处理和生物识别技术是至关重要的部分,而“局部对比相位描述符”(Local Contrast Phase Descriptor,简称LCPD)正是其中的一种创新方法,尤其在活体检测(liveness detection)中表现出色。...

Global site tag (gtag.js) - Google Analytics