`
zsjg13
  • 浏览: 139467 次
  • 性别: Icon_minigender_1
  • 来自: 安徽
社区版块
存档分类
最新评论

第3章 数据同步

阅读更多

前一章中,介绍了许多基础知识:如何创建、启动、终结、命名线程、监控生命周期,等等。然而,那一章的例子讲解的线程或多或少是独立的:在它们之间不需要共享数据。

 

但在有些例子中,我们需要让一个线程能够做出判断:其他线程是否完成了它们的任务(也就是那个done标记)。在其他例子中,我们需要改变被用在动画canvas中的字符变量;这是由一个不同于重画canvas的Swing线程的一个线程完成的。当时,我们掩饰了细节,这可能会给你一个暗示它们不重要。然而,我们必须要理解,就是当2个线程共享数据时,复杂度会增加。不管我们是正在实现一个大型共享数据库还是仅仅共享一个done标记,这些复杂性必须要考虑。

 

本章将讨论线程间共享数据的问题。线程间共享数据会变得麻烦,就是因为竞争条件会同时(也就是并发)地访问相同的数据。将学习什么是竞争条件,如何解决它呢?

 

3.1、Synchronized关键字

线程间没有竞争条件的原因是对象中没有数据被共享。然而,其他线程会调用该对象的方法。这种情况下,就会有一个竞争条件。调用newCharacter()方法的线程和调用paintComponent()方法的线程会访问相同的数据。随机字符生成线程可能会修改字符(但这个时候event-dispatching线程正在使用该字符)。这2个线程还会修改X location。

 

竞争条件存在的原因是paintComponent()和newCharacter()方法不是atomic的。稍后我们将详细介绍竞争条件,现在我们只需要理解竞争条件会产生不同的结果,包括依赖于执行顺序产生的不在预料中的结果。

 

对Atomic的解释:atomic一词与原子有关,曾经被认为是物质的最小单元,不能再被拆分成独立的部分。当计算机代码被认为是atomic的时候,在它的执行过程中,它就不能被中断。这可以由硬件或软件模拟来实现。通常,硬件提供atomic指令,然后软件用它来实现atomic方法。

 

Java语言提供了synchronized关键字;和其他threading系统相比,该关键字可以让程序员访问一个资源(和mutex lock非常类似)。它对我们的作用,仅仅是阻止2个或更多个线程在同一时间调用同一对象上的方法。

 

Java中,每个对象都有一个与它相关联的锁。当一个方法被声明为synchronized,执行线程就必须获取该对象的锁才能继续做事。方法完成后,锁就自动释放了。不管方法是如何返回的,包括通过异常,锁都会被释放。

 

3.2、Volatile关键字

在这个例子中,实际上还有一个线程问题,并且是与setDone()方法有关。该方法是从event-dispatching线程中被调用的,就是当Stop按钮被按下时;它是被一个事件处理器调用的(就是一个actionPerformed()方法),该事件处理器是SwingTypeTester类的一个内部类。这里的问题就是该方法会改变正在被另一个线程用的数据:done标记,它被AnimatedDisplayCanvas类的线程在访问。

 

因此,我们不能仅仅同步这2个方法,就像我们之前那样?是的但也不是。是的,java的synchronized关键字可以解决该问题。但不是,目前我们学到的技术还不能正常工作。原因呢,和run()方法有关。如果我们对run()和setDone()方法都进行了同步,setDone()方法又如何在什么时候执行呢?run()方法不会退出,直到done标记被设置,但done标记不能被设置,因为setDone()方法只能直到run()方法完成后才能执行。

 

未完。。。。。。。。。。。。。。。。

 

 

 

 

分享到:
评论

相关推荐

    第四章、以太坊如何在本地私有链上创建新节点,节点间进行同步?

    前言:上述第三章我们已经讲解了如何搭建本地私有链,也已经搭建好了一条以太坊私有链。接下来我们就在这条私有链上创建多个节点,并进行数据同步。 1、在privateChain目录下创建一个名为data1的节点 #进入private...

    软件设计师考试同步辅导 考点串讲、真题详解与强化训练

    第3章 操作系统知识 第4章 系统开发和运行 第5章 网络基础知识 第6章 多媒体基础知识 第7章 数据库技术 第8章 数据结构 第9章 算法设计和分析 第10章 面向对象技术 第11章 标准化和软件知识产权基础知识 第12章 ...

    Java数据结构与算法中的源代码和applet - 站长下载

    第三章类的设计 第四章算法介绍 第五章泛型类与方法 第六章递归 第七章排序算法 第八章集合类型 第九章基于数组的列表集合 第十章链表 第十一章实现LinkedList类 第十二章迭代器 第十三章迭代器的实现 第十四章堆栈 ...

    通信工程新技术实用手册 数字数据通信技术分册

    第三章 信源编码技术 第四章 时分复用与数字复接技术 第五章 数字信号的基带传输技术 第六章 数字信号的载波传输技术 第七章 数字信号的最佳接收方案 第八章 数字信号的同步技术 第九章 差错控制技术 第十章 ...

    《Windows Phone 7高级编程》随书源代码(2)

    第3章 按照“红线准则”设计布局 第4章 添加运动效果 第5章 方向与覆盖组件 第6章 导航 第7章 应用程序平铺图标与通知 第8章 任务 第9章 触控输入 第10章 摇晃与振动 第11章 播放音频 第12章 确定位置 第13章 连接与...

    Windows Phone 7高级编程 源码 (一)

    第3章 按照“红线准则”设计布局 第4章 添加运动效果 第5章 方向与覆盖组件 第6章 导航 第7章 应用程序平铺图标与通知 第8章 任务 第9章 触控输入 第10章 摇晃与振动 第11章 播放音频 第12章 确定位置 第13章 连接与...

    单片机数据通信典型应用大全

    第3章 RS-232通信协议 3.1 RS-232通信协议概述 3.1.1 机械特性 3.1.2 电气特性 3.1.3 功能特性 3.1.4 RS-232的连接 3.2 常用RS-232转换芯片简介 3.2.1 TTL和COMS逻辑与RS-232逻辑比较 3.2.2 MAX232系列 ...

    UNIX 编程技术与实例分析

    第3章 套接字基础 第4章 TCP套接字 第5章 UDP套接字 第三部分 Unix网络编程实用技术 第6章 并发服务器 第7章 名字和IP地址转换 第8章 同步及进程间通信 第9章 异常处理 第10章 创建实用套接字类库 第四...

    uCOS教程 第6章 任务之间的通讯与同步

    本章将介绍另外三种用于数据共享和任务通讯的方法:信号量、邮箱和消息队列。 图F6.1介绍了任务和中断服务子程序之间是如何进行通讯的。

    2018_2019学年七年级数学上册第六章数据的收集与整理第3节数据的表示第2课时频数直方图同步练习含解析新版北师大版

    2018_2019学年七年级数学上册第六章数据的收集与整理第3节数据的表示第2课时频数直方图同步练习含解析新版北师大版

    2018_2019学年七年级数学上册第六章数据的收集与整理第3节数据的表示第1课时扇形统计图同步练习含解析新版北师大版

    2018_2019学年七年级数学上册第六章数据的收集与整理第3节数据的表示第1课时扇形统计图同步练习含解析新版北师大版

    PIC18Fxxx单片机

    第三章 复位 第四章 存储器结构 第五章 数据存储器EEPROM 第六章 程序存储器FLASH 第七章 8*8硬件乘法器 第八章 中断 第九章 I/O端口 第十章 并行从动端口 第十一章 定时器/计数器TMRO模块 第十二章 定时器/计数器...

    编程机制探析

    第三章 计算机运行结构 第四章 运行栈与内存寻址 第五章 命令式编程 第六章 面向对象 第七章 设计模式 第八章 Compositor Pattern 第九章 线程 第十章 线程同步模型 第十一章 Copy on Write 第十二章 Iterator ...

    数字通信同步技术的MTALAB与FPGA实现》PPT版

    第3章 锁相技术原理及应用 71 3.1 锁相环的工作原理 72 3.1.1 锁相环路的模型 72 3.1.2 锁定与跟踪的概念 73 3.1.3 环路的基本性能要求 74 3.2 锁相环的组成 75 3.2.1 鉴相器 75 3.2.2 环路滤波器 76 3.2.3 ...

    基于同步矩阵的多通道脑电功能连接分析-kaic.docx

    第三章 同步矩阵的构建和特征提取 3.1 同步矩阵的定义和性质 3.2 同步矩阵的构建方法 3.3 同步矩阵特征的提取方法 3.4 功能连接的定义和测量指标 3.5 基于同步矩阵的功能连接分析方法 3.6 多通道脑电功能连接分析...

    第七章-《大数据导论》大数据处理平台.pdf

    大数据处理平台 汇报人: 刘宏志 liuhz@pku.edu.cn 北京大学 软件与微电子学院 提纲 动机:为什么需要大数据处理平台 大数据处理平台的特点 大数据处理平台的架构 三种不同大数据的处理 传统计算:单机计算 特点: ...

    Excel 2007数据透视表完全剖析 1/7

    第3章 自定义数据透视表 35 3.1 改变常用修饰 36 3.1.1 应用表格样式恢复网格线 37 3.1.2 修改数字格式来添加千位分隔符 38 3.1.3 用0代替空值 39 3.1.4 修改字段名称 41 3.2 改变布局 42 3.2.1 使用...

    Excel 2007数据透视表完全剖析 3/7

    第3章 自定义数据透视表 35 3.1 改变常用修饰 36 3.1.1 应用表格样式恢复网格线 37 3.1.2 修改数字格式来添加千位分隔符 38 3.1.3 用0代替空值 39 3.1.4 修改字段名称 41 3.2 改变布局 42 3.2.1 使用...

    GNU/Linux编程指南(第二版)中文版含光盘

    第3部分 进程和同步 第13章 进程控制 第14章 线程概述 第15章 访问系统信息 第16章 内存管理 第17章 进程间通信 第18章 守护进程 第4部分 网络编程 第19章 TCP/IP和套接口编程 第20章 UDP:用户数据报协议 第21章 ...

    VB同步练习题与解答

     第1章 程序设计语言与程序设计  1.1 填空题  1.计算机系统中,对高级语言的翻译工具称为( )程序或( )程序。  答案:编译、解释  2.程序是解决特定问题的指令序列,主要完成( )和( )两方面工作...

Global site tag (gtag.js) - Google Analytics