线程安全
线程安全包含两个方面
变量安全:进程中有多个线程在同时运行,而这些线程可能会同时运行某一段代码如果每次运行结果和单线程运行的结果是一样的。而且其他变量的值也和预期的是一样的,称为变量安全。反正,就不能叫变量安全。
线程同步:代码中的业务逻辑是一个原子性的动作,一旦分割执行就可能导致丧失其本来意义。然而在多线程环境下,运行中的线程被线程调度器暂时“叫停”的可能性随时存在的,这就给原子性的业务动作造成了潜在的危险。这时必须启用线程同步机制,即在一个线程执行完这组动作之前,其他线程不能进入这段代码。
首先介绍变量安全来看一个程序:【Main】
执行结果:
上面程序在单线程下市不会出现问题。但是大家看到结果就发现了问题。两个线程共用了同一个变量sum.
解决方法有两种:
第一种:舍弃“单实例,多线程”模式,而使用“多实例,多线程”模式。这种模式效率比较低,但是最接近于传统的单线程编程,基本不存在变量安全的风险。
第二种:把变量尽可能的封装在方法中,使其称为方法的内部变量。
按照第一种方法来改代码如下:
执行结果:
按照第二种方法代码如下:
执行结果:
<!--EndFragment-->
<!--EndFragment-->
<!--EndFragment-->
分享到:
相关推荐
3.5.2 声明变量标记——var 61 3.5.3 忽视HTML标记 ——plaintext、xmp 62 3.6 小结 63 3.7 习题 63 第4章 使用列表 65 教学录像:35分钟 4.1 列表的标记 66 4.2 使用无序列表 66 4.2.1 无序...
第1部分 基础篇 第1堂课 java概述 3 视频讲解:31分钟 1.1 java简介 4 1.1.1 java发展历史 4 1.1.2 java的几个版本 5 1.1.3 java应用领域 6 1.1.4 java项目成功案例 6 1.1.5 怎样学好java 8 1.2 环境搭建 8...
3.5 编写多文件程序——变量的存储类别 3.5.1 存储类别 3.5.2 static变量的作用——改变变量的生命期 3.5.3 static变量的作用——实现封装和模块化设计 3.6 编写多文件的程序——链接的作用 3.6.1 链接多个文件 ...
1.4.12 FirstDayOfWeek属性——获取或设置一周中的第一天 56 1.4.13 Format方法——格式化字符串 56 1.4.14 GETDATE函数——返回当前系统日期和时间 58 1.4.15 GetDayOfMonth方法——返回几号 59 1.4.16 ...
第1章 串行通信原理与设计 1 1.1 串行通信基本概念 1 1.1.1 串行通信特点 1 1.1.2 串行通信传输方式 2 1.1.3 数据纠错与检错 2 1.1.4 传输速率与距离 3 1.2 串行传输协议 4 1.2.1 异步传输协议 4 1.2.2 面向字符的...
在消息发送的过程中,涉及到了两个线程——main 线程和 Sender 线程,以及一个线程共享变量——RecordAccumulator。main 线程将消息发送给 RecordAccumulator,Sender 线程不断从 RecordAccumulator 中拉取消息发送...
3.2 简单数据类型的实例化——变量与常量 3.3 整型常量和变量 3.4 浮点型常量和变量 3.5 字符型常量和变量 3.6 布尔型常量和变量 3.7 各类型数据间的优先关系和相互转换 第4章 运算符与表达式 4.1 算术...
第1章 让自己的第一个Java程序跑起来 2 教学视频:19分钟 1.1 想要用Java改变这个世界吗? 2 1.1.1 Java有什么优势? 2 1.1.2 Java在哪儿? 3 1.2 准备好开始Java之旅 3 1.2.1 下载JDK 4 1.2.2 安装JDK 5 ...
第1章 让自己的第一个Java程序跑起来 2 教学视频:19分钟 1.1 想要用Java改变这个世界吗? 2 1.1.1 Java有什么优势? 2 1.1.2 Java在哪儿? 3 1.2 准备好开始Java之旅 3 1.2.1 下载JDK 4 1.2.2 安装JDK 5 ...
第16章 多线程——Java中的并发协作 343 16.1 线程的基本知识 343 16.1.1 多线程编程的意义 343 16.1.2 定义自己的线程 344 16.1.3 创建线程对象 345 16.1.4 启动线程 347 16.1.5 同时使用多个线程 ...
8.4.6 示例——图像浏览器 第9章 多线程编程 9.6.1 示例——使用全局变量通信 9.6.2 示例——使用Windows消息通信 9.7.5 示例——使用CriticalSection对象 9.7.7 示例——使用Mutex对象 9.7.9...
8.4.6 示例——图像浏览器 第9章 多线程编程 9.6.1 示例——使用全局变量通信 9.6.2 示例——使用Windows消息通信 9.7.5 示例——使用CriticalSection对象 9.7.7 示例——使用Mutex对象 9.7.9...
第一种开启服务器 ①. 创建负责监听客户端的套接字(全局变量) ②. 定义一个套接字用于监听客户端发来的信息包含3个参数(IPV4寻址协议,流式连接,TCP协议) ③. 获取文本框输入的IP地址 ,服务端发送信息 需要1个IP...
第1天 注释的应用 第2天 02_+号的应用 03变量的使用 C中的转义符 05交换量变量 07接收用户的信息 04个练习 06占位符 第3天 04逻辑运算符 05if结构 06习题 03bool类型 02Convert字符转换练习 01Convert字符装换 ...
由3部分组成:第一部分是C#入门教程,用12章阐述了C#语言的最基本特征和主要功能,包括:C#介绍;一个简单的欢迎程序;表达式、类型和变量;控制语句——选择;控制语句——循环;方法;名称空间;类的入门;类的...
4,子进程每accept到一个请求都告诉父进程,父进程把请求数加1;子进程没完成一个请求,父进程把请求数减1;当父进程发现请求数 >= 子进程数时,父进程创建新的子进程,并把子进程数加1(当然子进程数有个预先上限)...