网络编程基础知识之线程安全

  线程安全是多线程编程中的一个概念。在拥有共享数据的多条线程并行执行的程序中,线程安全的代码会通过同步机制保证各个线程都可以正常且正确的执行,不会出现数据污染等意外情况。线程安全性的分类方法包括不可变、线程安全、有条件线程安全等。这种分类系统的核心是调用者是否可以或者必须用外部同步包围操作线程安全具有多线程共享变量或方法可以在多线程的环境下被安全有效地访问的意义。这说明了两方面的问题:(1)可以从多个线程中调用,无需调用方有任何操作。(2)可以同时被多个线程调用,无需线程之间不必要的交互。

  通俗地说,就是多线程访问时,采用了加锁机制,当一个线程访问该公共类的数据时,进行保护。其他线程不能进行访问,直到该线程读取完,其他线程才可使用。不会出现数据不一致或者数据污染。

线程不安全:通俗地说,就是在多个线程访问时,不提供数据保护,有可能出现多个线程先后访问更改数据所得到的数据是脏数据。

  在实际多线程编程过程中,也可以说当一个类或者程序所提供的接口对线程来说是原子操作或者多个线程之间的切换不会导致该接口的执行结果存在二义性,也就是我们无需考虑同步问题这样我们也可以说是线程安全的。

  线程安全问题都是由全局变量静态变量引起的。

  若每个线程中对全局变量、静态变量只有读操作,而无写操作,一般来说,这个全局变量就是线程安全的;若有多个线程同时执行写操作,一般都要考虑线程同步,否则的话就可能影响线程安全。

线程安全性常见类别

主要有:不可变、线程安全、有条件的线程安全。

不可变

  不可变的对象一定是线程安全的,并且永远也不需要额外的同步。因为一个不可变的对象只要构建正确,其外部可见状态永远也不会改变,永远也不会看到它处于不一致的状态

线程安全

  线程安全的对象具有在上面“线程安全”一节中描述的属性——由类的规格说明所规定的约束在对象被多个线程访问时仍然有效,不管运行时环境如何排线程对都不需要任何额外的同步

有条件的线程安全

  有条件的线程安全类对于单独的操作可以是线程安全的,但是某些操作序列可能需要外部同步。有条件的线程安全最常见的例子是遍历由HashTable或者Vector返回的迭代器——由这些类返回的迭代器假定在迭代器进行遍历的时候底层集合不会发生改变。为了保证其他线程不会在遍历的时候改变集合,进行迭代的线程应该确保它是独占性地访问集合以实现遍历的完整性。通常,独占性的访问是由对锁的同步保证的并且类的文档应当说明是哪类锁

网络编程基础知识之线程安全相关推荐

  1. Linux网络编程基础知识

    Linux网络编程基础知识 1. 协议的概念 1.1 什么是协议 1.2 典型协议 2 网络应用程序设计模式 2.1 C/S模式 2.2 B/S模式 2.3 优缺点 3 分层模型 3.1 OSI七层模 ...

  2. Java 网络编程基础知识

    Java 网络编程基础知识 基础概念 计算机网络的基本概念 ​ 网络:多台计算机使用网络设备互联在一起,计算机之间可以进行通信,这样就组成了一个计算机网络. ​ 网络设备:集线器(HUB),路由器,交 ...

  3. 多实例多进程网络编程PHP,php socket网络编程基础知识(四):多进程

    标签:status   传递   windows   返回   修改   队列   _for   响应   关联 说明 php在web编程时是不需要考虑多进程的,但整个php流程是涉及到多进程的,只不 ...

  4. python网络编程基础知识_python网络编程基础

    一.客户端/服务器架构 网络中到处都应有了C/S架构,我们学习socket就是为了完成C/S架构的开发. 二.scoket与网络协议 如果想要实现网络通信我们需要对tcpip,http等很多网络知识有 ...

  5. 网络编程基础知识概括帮助你了解架框组成客户端服务端架构

    阅读目录 1.楔子 2.客户端/服务端架构 3.网络基础 4.套接字(socket)初使用 写python代码 你现在已经学会了写python代码,假如你写了两个python文件a.py和b.py,分 ...

  6. 11.网络编程-基础知识 C++/Linux-2022-10-20

    linux网络编程 1.网络基础 网络应用程序设计模式 C/S - client/sercver 优点:1.协议选用灵活,2.可以缓存数据 缺点:用户安全,开发工作量大,调试困难 B/S - brow ...

  7. 网络编程基础知识(待更新补充)

    1.C/S架构(client/server) 即客户端(泛指客户端程序exe)与服务端架构 2.B/S架构(Browser/Server) 浏览器端与服务器端架构 3.广播 主机之间'一对所有'的通讯 ...

  8. 网络编程 -- 基础知识 流(输入流,输出流)

    1. 流 流是指通过一定的传播路径从源传递到目的地的字节序列.Java中的字节流分为输入流和输出流:输出流是指向目的地的写入的二进制序列,输入流是从数据源读取的二进制序列.网络编程的很大一部分工作都是 ...

  9. 网络编程基础知识详解

    什么是网络编程 网络编程的本质是两个设备之间的数据交换,当然,在计算机网络中,设备主要指计算机.数据传递本身没有多大的难度,不就是把一个设备中的数据发送给两外一个设备,然后接受另外一个设备反馈的数据. ...

  10. socket通信需要网线连接吗_socket网络编程基础知识篇

    网络通信是一种进程间通信(IPC, Inter-Process Communication),要求位于不同网络节点不同进程的通信双方必须遵循统一的通信协议方可实现.基于套接字(Socket)通信是应用 ...

最新文章

  1. Project Explore 再现
  2. 写了 30 万行基础设施代码后,我们得出 5 个有用的经验
  3. 【记录】vmware fusion 7 windows 10 unidentified network
  4. 建议收藏!一文走遍机器学习的6个主流模型
  5. JavaScript实现快速傅立叶变换FFT算法(附完整源码)
  6. 无服务器计算,如何节省时间和成本?
  7. 【题解】SCOI2009围豆豆
  8. python机器学习案例系列教程——聚类算法总结
  9. ccc强制性认证是什么?
  10. chorme浏览器插件的安装、配置及使用
  11. LeetCode - Pascal's Trangle2
  12. POST http://localhost:8080/XXX/XXX 400 (Bad Request)
  13. webpack 打包报错:Can't resolve '.\dist\bundle.js' in 'E:\vivian....'
  14. 一影碎念,一场风花,浅吟低唱成悲曲:伤感日志
  15. 中国移动OneOS助力全国大学生物联网竞赛开幕
  16. 【实验四 循环结构】7-4 sdut-C语言实验-求阶乘(循环结构)
  17. 商汤科技研究院招聘见习算法研究员
  18. DWL-2100AP 默认登录帐号密码
  19. 适配Oracle版本的ojbc驱动包版本,以及ojdbc驱动包的下载地址
  20. 【九】Java接口思维导图

热门文章

  1. 机器学习最常用的损失函数之交叉熵
  2. 当年如果有这个,语文就不会不及格了
  3. 每日一题[LeetCode 315]计算右侧小于当前元素的个数
  4. Linux:为什么性能工具需要 BPF 技术
  5. scrapy模拟登录微博
  6. Notepad++插件安装和使用和打开大文件
  7. 隔年增长的题_行测技巧:资料分析隔年增长问题
  8. 举例HTML的图像标记,教案html之css滤镜及练习层div块及span标记举例窗口内例题演示功能的实现总结.pdf...
  9. 现控笔记(五)稳定性与Lyapunov方法
  10. Ubuntu下Android Studio连接手机无法识别