AvA 多线程编程钱术(2) 辽宁经济职业技术学院信息系 硕士、副教授陈英 JAVA
多线程编程技术(2) 辽宁经济职业技术学院信息系 硕士、副教授 陈英
AvA 银行模型圄杀 存款 银行 存款操作 职员1 存款 贷款操作 贷款 计算机白 职员2 操作是重 的 JAVA
银行模型图示 存款 存款操作 贷款操作 银行 计算机的 操作是重 叠的 存款 贷款 职员1 职员2
AVA 线程的各种状态 睡眠 被中断 在O上中 新线程 通知 可运行 启动 死 JAVA
线程的各种状态 新线程 被中断 可运行 死 睡眠 睡眠结束 在I/O上中断 等待 通知 Run方法退出 停止 启动
AvA 银行模型程序 ◎银行模型实际上是一个对帐户进行操作的计算机 并且这个帐户是独立存储的。每名职员都直接与 银行通信。 ○在银行模型程序中,定义以下五个类表示银行操 作: 1)Bank类,表示银行计算机。 2) Account类,表示银行中的帐户 3) Transactiona类,表示帐户的一个事务,例如存款或 者借贷。 4) Clerk类,表示一个银行职员。 5)包含man方法的 BankOperation类,用于动 理过程并且确定如何工作。 JAVA
银行模型程序 银行模型实际上是一个对帐户进行操作的计算机, 并且这个帐户是独立存储的。每名职员都直接与 银行通信。 在银行模型程序中,定义以下五个类表示银行操 作: 1) Bank 类,表示银行计算机。 2) Account类,表示银行中的帐户。 3) Transaction类,表示帐户的一个事务,例如存款或 者借贷。 4) Clerk类,表示一个银行职员。 5) 包含main()方法的BankOperation类,用于启动处 理过程并且确定如何工作
AvA 线裎的管理 当两个或多个线程共享公用资源时,如一个 文件或者一块内存区,你需要采取一些步骤 来保证其中一个线程不会在此资源仍然被另 线程使用的时候修改该资源。 o如果在一个线程正在检索一条记录的时候让 另一个线程更改这条记录,那么就会出现灾 难性的结果。 管理这程情况的办法之一是对相关的线程使 用同步处理( synchronized) JAVA
线程的管理 当两个或多个线程共享公用资源时,如一个 文件或者一块内存区,你需要采取一些步骤 来保证其中一个线程不会在此资源仍然被另 一线程使用的时候修改该资源。 如果在一个线程正在检索一条记录的时候让 另一个线程更改这条记录,那么就会出现灾 难性的结果。 管理这程情况的办法之一是对相关的线程使 用同步处理(synchronized)
AvA 同步处理 进行同步处理的目的是为了保证当多个 线程想访问一个资源时,在任何给定的 时间都只有一个线程可以访问。 有两种方法可以采用同步处理来管理自 己的线程 1)可以在方法级管理代码,这里涉及到方法 的同步。 2)可以在代码块级管理代码,使用同步代码 块。 JAVA
同步处理 进行同步处理的目的是为了保证当多个 线程想访问一个资源时,在任何给定的 时间都只有一个线程可以访问。 有两种方法可以采用同步处理来管理自 己的线程: 1) 可以在方法级管理代码,这里涉及到方法 的同步。 2) 可以在代码块级管理代码,使用同步代码 块
职1线程 主线程 职员2线程 AVA 职员1 职员2 同步 main( 同步 Clerkl. run(Clerk. doTransactiono Clerk2 runo 通知 通知 the Bank. dolransactiono the Bank.doT ansactiono 存款操作 Clerk2. dotransactiono 存款操作 贷款操作 贷款操作 同步 同步 帐户 帐户 JAVA
存款操作 贷款操作 theBank.doTransaction() 存款操作 贷款操作 theBank.doTransaction() 职员1线程 主线程 职员2线程 职员1 职员2 帐户 帐户 Clerk1.run() Clerk2.run() main() Clerk1. doTransaction() Clerk2. doTransaction() 同步 同步 通知 通知 同步 同步
AvA 线程的优先权 某一时刻只有一个线程在执行,调度策略为固定 优先级调度 newthread setPriority (Thread. MIN PRIORITY 线程的级别有: 1) MIN-PRIORITY NOM PRIORITY 3) MAX-PRIORITY 自私的线程有很高的优先权的线程,不主动睡眠 或让出处理器控制权 JAVA
线程的优先权 某一时刻只有一个线程在执行,调度策略为固定 优先级调度. newthread.setPriority(Thread.MIN_PRIORITY) 线程的级别有: 1) MIN-PRIORITY 2) NOM_PRIORITY 3) MAX-PRIORITY 自私的线程:有很高的优先权的线程,不主动睡眠 或让出处理器控制权
多其它常用的方法 AvA o isalive:判断线程目前是否正在执行状态中 if(newthread. isAliveO) newthread stope O resume:要求被暂停得线程继续执行 O suspend:暂停线程的执行 ojoin:等待线程执行完毕 o thatThreadjoin 0: 被等待的那个线程不结束当前线程就一直等待 O yield: yi 将执行的权力交给其它线程自己到队列的最后等 待 JAVA
其它常用的方法 isAlive:判断线程目前是否正在执行状态中 if(newthread.isAlive()) newthread.stop(); resume:要求被暂停得线程继续执行 suspend:暂停线程的执行 join:等待线程执行完毕 thatThread.join(); 被等待的那个线程不结束,当前线程就一直等待. yield: 将执行的权力交给其它线程,自己到队列的最后等 待
AvA 多线程问题-资源协调 对共享对象的访问必须同步,叫做条件变量 O Java语言允许通过监视器(有的参考书称其为管程)使 用条件变量实现线程同步 监视器阻止两个线程同时访问同一个条件变量它的如 /。同锁一样作用在数据上 ○线程进入 withdrawal方法时获得监视器(加锁);当线 程1的方法执行完毕返回时释放监视器(开锁),线程2的 withdrawa方能进入 监视器 线程2 线程1 withdrawal JAVA
多线程问题---资源协调 对共享对象的访问必须同步,叫做条件变量. Java语言允许通过监视器(有的参考书称其为管程)使 用条件变量实现线程同步. 监视器阻止两个线程同时访问同一个条件变量.它的如 同锁一样作用在数据上. 线程1进入withdrawal方法时,获得监视器(加锁);当线 程1的方法执行完毕返回时,释放监视器(开锁),线程2的 withdrawal方能进入. withdrawal() 线程1 监视器 线程2