Java 程序设计 第 8 章 多线程. 第 8 章 Java 的多线程 8.1 线程及其创建 8.1.1 Java 中的线程 Java 程序通过流控制来执行程序流,程序中单个顺序的流 控制称为线程, 多线程则指的是在单个程序中可以同时运行 多个不同的线程执行不同的任务。 单个程序内部也可以在同一时刻进行多种运算。

Slides:



Advertisements
Similar presentations
7.1 内置对象概述及分类 JSP 视频教学课程. JSP2.2 目录 1. 内置对象简介 1. 内置对象简介 2. 内置对象分类 2. 内置对象分类 3. 内置对象按功能区分 3. 内置对象按功能区分 4. 内置对象作用范围 4. 内置对象作用范围.
Advertisements

面向侧面的程序设计 方林博士 本文下载地址:
第四章 类、对象和接口.
第七章 多线程处理 线程的互斥 线程的同步 死锁问题.
项目6 通用堆栈.
讓你的程式具有多工(Multitasking) 及多重處理(Multiprocessing)的能力
Java Programming Spring, 2010
第7章 多线程 北京大学计算机系 代亚非.
第9章 Java多线程机制 9.1 Java中的线程 9.2 Thread的子类创建线程 9.3 使用Runable接口
设计模式可以帮助我们改善系统的设计,增强 系统的健壮性、可扩展性,为以后铺平道路。
第11章 Java多媒体技术.
线程与线程实现 主讲:赖国荣 QQ:
第二章 JAVA语言基础.
第九章 字符串.
Kvm异步缺页中断 浙江大学计算机体系结构实验室 徐浩.
Hadoop I/O By ShiChaojie.
OpenMP简介和开发教程 广州创龙电子科技有限公司
Java语言程序设计 第七部分 多线程.
EBNF 请用扩展的 BNF 描述 C语言里语句的结构; 请用扩展的 BNF 描述 C++语言里类声明的结构;
程序與函數的類別方法 目的:模組化程式設計 方法:由上而下設計 注意事項:(1)獨立性 (2)結合問題 (3)子問題間的溝通.
第四次课后作业 1 问题描述: 将谜题定义为:包含一个初始位置,一个目标位置,以及用于判断是否是有效移动的规则集。
C#程序设计 c# programming 多线程 C#程序设计课程组.
2018/12/3 面向对象与多线程综合实验-网络编程 教师:段鹏飞.
第22讲 Java高级编程(一).
王豐緒 銘傳大學資訊工程學系 問題:JAVA 物件檔輸出入.
辅导课程六.
第10章 Java的线程处理 10.1 线程的基本概念 10.2 线程的属性 10.3 线程组 10.4 多线程程序的开发.
2018/12/7 Java语言程序设计-多线程 教师:段鹏飞.
临界区软件互斥软件实现算法.
第一次课后作业 1. C/C++/Java 哪些值不是头等程序对象 2. C/C++/Java 哪些机制采用的是动态束定
9.1 程式偵錯 9.2 捕捉例外 9.3 自行拋出例外 9.4 自定例外類別 9.5 多執行緒
$16 进程和线程. $16 进程和线程 进程 进程 属性 ProcessName / Id MachineName / MainModule BasePriority StartTime / ExitTime TotalProcessorTime / UserProcessorTime PrivateMemorySize64.
第二章 Java语言基础.
本节内容 模拟线程切换 视频提供:昆山滴水信息技术有限公司 官网地址: 论坛地址: QQ交流 :
临界区软件互斥软件实现算法 主讲教师:夏莹杰
C/C++/Java 哪些值不是头等程序对象
用event class 从input的root文件中,由DmpDataBuffer::ReadObject读取数据的问题
4.2通讯服务模块线程之间传递信息 信息工程系 向模军 Tel: QQ:
Multithread 多執行緒 以GUI為例了解物件以及Event
第7章 Java 的多线程机制.
JAVA 编 程 技 术 主编 贾振华 2010年1月.
《JAVA程序设计》 语音答疑 辅导老师:高旻.
C++语言程序设计 C++语言程序设计 第七章 类与对象 第十一组 C++语言程序设计.
EBNF与操作语义 请用扩展的 BNF 描述 javascript语言里语句的结构;并用操作语义的方法描述对应的语义规则
$9 泛型基础.
第9章 多线程 王德俊 上海交通大学继续教育学院.
分裂对象模型 C++ otcl.
Java程式初體驗大綱 大綱 在學程式之前及本書常用名詞解釋 Hello Java!程式 在Dos下編譯、執行程式
第五次课后作业 1 问题描述: 将谜题定义为:包含一个初始位置,一个目标位置,以及用于判断是否是有效移动的规则集。
信号量(Semaphore).
第二章 Java语法基础.
iSIGHT 基本培训 使用 Excel的栅栏问题
西南科技大学网络教育系列课程 高级语程序设计(Java) 第八章 线程.
辅导课程十一.
第二章 Java基本语法 讲师:复凡.
临界区问题的硬件指令解决方案 (Synchronization Hardware)
OpenStack vs CloudStack
本节内容 C语言的汇编表示 视频提供:昆山爱达人信息技术有限公司 官网地址: 联系QQ: QQ交流群 : 联系电话:
本节内容 Windows线程切换_时钟中断切换 视频提供:昆山滴水信息技术有限公司 官网地址: 论坛地址: QQ交流 :
基于列存储的RDF数据管理 朱敏
本节内容 动态链接库 视频提供:昆山爱达人信息技术有限公司 官网地址: 联系QQ: QQ交流群 : 联系电话:
C++语言程序设计 C++语言程序设计 第九章 类的特殊成员 第十一组 C++语言程序设计.
C++语言程序设计 C++语言程序设计 第九章 类的特殊成员 第十一组 C++语言程序设计.
第2章 Java语言基础.
第8章 创建与使用图块 将一个或多个单一的实体对象整合为一个对象,这个对象就是图块。图块中的各实体可以具有各自的图层、线性、颜色等特征。在应用时,图块作为一个独立的、完整的对象进行操作,可以根据需要按一定比例和角度将图块插入到需要的位置。 2019/6/30.
本节内容 进程 视频提供:昆山爱达人信息技术有限公司 官网地址: 联系QQ: QQ交流群 : 联系电话:
创建、启动和关闭Activity 本讲大纲: 1、创建Activity 2、配置Activity 3、启动和关闭Activity
使用Fragment 本讲大纲: 1、创建Fragment 2、在Activity中添加Fragment
本节内容 SEMAPHORE 视频提供:昆山滴水信息技术有限公司 官网地址: 论坛地址: QQ交流 :
C++语言程序设计 C++语言程序设计 第九章 类的特殊成员 第十一组 C++语言程序设计.
Presentation transcript:

Java 程序设计 第 8 章 多线程

第 8 章 Java 的多线程 8.1 线程及其创建 Java 中的线程 Java 程序通过流控制来执行程序流,程序中单个顺序的流 控制称为线程, 多线程则指的是在单个程序中可以同时运行 多个不同的线程执行不同的任务。 单个程序内部也可以在同一时刻进行多种运算。 很多程序语言需要利用外部的线程软件包来实现多线程, 而 Java 则内在支持多线程,它的所有类都是在多线程的思 想下定义的。

第 8 章 Java 的多线程 线程 线程就是程序中单独顺序的流控制。 Java 的线程是通过 Java 的软件包 java.lang 中定 义的类 Thread 来实现的。

第 8 章 Java 的多线程 线程体 线程的所有活动都是通过线程体 ---- run() 方法来实现的。 在一个线程被建立并初始化以后, Java 的运行时系统就自 动调用 run() 方法。 正是通过 run() 方法才使得建立线程的目的得以实现。 通常, run() 方法是一个循环,例如一个播放动画的线程 要循环显示一系列图片。 有时, run() 方法会执行一个时间较长的操作,例如下载 并播放一个 JPEG 格式的电影。

第 8 章 Java 的多线程 创建线程对象的两种方法 1 .通过继承 Thread 类创建线程 class MyThread extends Thread { public void run() { for(int i=0;i<100;i++) { System.out.print (" " + i); } } 2 .通过向 Thread() 构造方法传递 Runnable 对象来创建线程 class MyTask implements Runnable { public void run() { … } } Thread thread = new Thread(mytask); thread.start(); 3. 可用匿名类来实现 Runnable ,如 TestThread4Anonymous.java

第 8 章 Java 的多线程 多线程 TestThread3.java 多线程。 ThreadDraw.java 多线程绘图。

第 8 章 Java 的多线程 8.2 线程的控制

第 8 章 Java 的多线程 线程的状态与生命周期 在一个线程的生命周期中,它总处于某一种状态 中。 线程的状态表示了线程正在进行的活动以及在这 段时间内线程能完成的任务。

第 8 章 Java 的多线程 线程优先级 Thread 类有三个有关线程优先级的静态常量: MIN_PRIORITY , MAX_PRIORITY , NORM_PRIORITY

第 8 章 Java 的多线程 对线程的基本控制 结束线程 现在一般采取给线程设定一个标记变量的方法来决定线 程是否应该终止。 设定线程的优先级 可以使用 Thread 对象的 setPriority( int priority) 方法

第 8 章 Java 的多线程 线程 的启动: start() 暂时阻止线程的执行 Thread.sleep(long millisecond ) 来挂起线程的执行 try{ Thread.sleep( 1000 ); } catch( InterruptedException e ){ // …. } join() 方法。调用某 Thread 对象的 join() 方法,可以将一个线程加入到本 线程中,本线程的执行会等待另一线程执行完毕。 Thread t; // t 是另一线程 try{ t.join(); } catch( InterruptedException e ){ // …. }

第 8 章 Java 的多线程 后台线程 线程有两种,一类是 Daemon 线程,一类是非 Daemon 线程。在 Java 程序中,若还有非 Demon 线程,则整个程序就不会结束;当正在运行的线 程都是守护线程时, Java 虚拟机退出。 使用 setDaemon(true); 垃圾回收是后台线程 示例: TestThreadDaemon.java

第 8 章 Java 的多线程 8.3 线程的同步

第 8 章 Java 的多线程 多线程同步 线程都是独立的,而且异步执行,也就是说每个 线程都包含了运行时所需要的数据或方法,而不 需要外部的资源或方法,也不必关心其它线程的 状态或行为。但是经常有一些同时运行的线程需 要共享数据,例如一个线程向文件写数据,而同 时另一个线程从同一文件中读取数据,因此就必 须考虑其它线程的状态与行为,这时就需要实现 同步来得到预期结果。 示例: SyncCounter1.java

第 8 章 Java 的多线程 在 Java 语言中,引入了对象互斥锁的概念,来保证共 享数据操作的完整性。 每个对象都对应于一个可称为 “ 互斥锁 ” 的标记,这 个标记用来保证在任一时刻,只能有一个线程访问 该对象。 关键字 synchronized 用来与对象的互斥锁联系。 当某个对象用 synchronized 修饰时,表明该对象在 任一时刻只能由一个线程访问。 使用 wait() 方法可以释放对象锁 使用 notify() 或 notifyAll() 可以让等待的一个或所 有线程进入就绪状态

第 8 章 Java 的多线程 synchronized 除了象上面讲的放在对象前面限 制一段代码的执行外,还可以放在方法声明中, 表示整个方法为同步方法。 public synchronized void push(char c){ … } 如果 synchronized 用在类声明中,则表明该类中 的所有方法都是 synchronized 的。 示例: SyncCounter2.java

第 8 章 Java 的多线程 生产者 - 消费者问题 示例: ProducerConsumerStack.java class CubbyHole { private int index = 0; private int []data = new int[3]; public synchronized void put(int value){ while(index == data.length){ try{ this.wait(); }catch(InterruptedException e){} } data[index] = value; index++; this.notify(); }

第 8 章 Java 的多线程 public synchronized int get(){ while(index <=0){ try{ this.wait(); }catch(InterruptedException e){} } index--; int val = data[index]; this.notify(); return val; } }

第 8 章 Java 的多线程 8.4 并行 API java.util.concurrent 包 Lock 、 ReentrantLock lock() tryLock() unlock() 例: NoDeadLockDemo.java ReadWriteLock 、 ReentrantReadWriteLock.writeLock().lock(),.readLock().unlock() 例: ArrayList2.java

第 8 章 Java 的多线程 并行的集合类 产生一个线程安全的集合对象 Collections.synchronizedArrayList(list) CopyOnWriteArrayList 、 CopyOnWriteArraySet 适合于很少写入而迭代频繁的对象 ArrayBlockingQueue 生产者与消费者,使用 put() 及 take() ConcurrentHashMap putIfAbsent(), remove(), replace()

第 8 章 Java 的多线程 线程相关的其他问题 使用 java.util.Timer /TimerTask 类 示例 TimerTest.java 在线程中更新图形化界面,要调用 invokeLater 示例 ThreadDrawJ.java