




已阅读5页,还剩15页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
第 10 章 多线程程序设计 线程的定义 l进程是一个用来描述处于动态运行状态的应用 程序的概念,即一个进程就是一个执行中的程 序,每个进程都有一块自己独立的地址空间, 并可以包含多个线程。这些线程将共享进程的 地址空间及操作系统分配给这个进程的资源。 l线程是指进程中的一个执行流,多线程是指在 一个进程中同时运行多个不同线程,每个线程 分别执行不同的任务。 10.1 创建线程 创建线程的两种方法: 1.利用Thread类创建线程 2.利用Runnable接口创建线程 1、利用Thread类创建线程 使用这种方式创建、启动线程的基本过程: 声明一个Thread类的子类,并且覆盖其中的 run() 成员方法,并将线程执行的程序代码写 在其中。 使用时时通过调过调 用Thread类类提供的start() 方法 间间接地使用它。 例:利用Thread类创建线程 public class MyThread_1 extends Thread public void run() public class MultiThread_1 public static void main(String args ) Thread t1 = new MyThread_1(); t1.setName(“T1“); Thread t2 = new MyThread_1(); t2.setName(“T2“); t1.start(); t2.start(); 2、利用Runnable接口创建线程 使用这种方式创建、启动线程的基本过程: 声明一个实现Runnable接口的类。 以实现Runnable 接口的类对象为参数创建一 个Thread 类对象。 调用Thread类对象的start() 方法启动线程。 例:利用Runnable接口创建线程 public class MyThread_2 implements Runnable public void run( ) public class MultiThread_2 public static void main(String args ) MyThread_2 thread = new MyThread_2( ); Thread threadObj = new Thread(thread); threadObj.start(); 10.2 线程状态的转换 一个线程的生命周期中,有四个状态,线程就 是在这4个状态之间不断变换,直到死亡为止。 线程的优先级 每一个线程都有一个优先级 ,在Thread类中有3 个常量MIN_PRIORITY、MAX_PRIORITY、 NORMAL_PRIORITY分别表示优先级为1、10和5, 它们代表最低优先级、最高优先级和普通优先级 。 可以调用Thread类的setPriority(int level) 成员方法为某个线程设置优先级。 例如,假设threadObj是一个Thread类对象,可 以用 threadObj.setPriority(6);设置优先级。 10.3 线程控制 基本的线程控制方法 启动线程 start() 阻塞线程 wait() 唤醒线程notify() 或 notifyAll() 或interrupt() 线程让步 yield() 等待其它线程结束join() 判断线程是否处于活动状态isAlive() 10.4 多线程的同步与互斥 l 一般来说线程之间不是孤立的,多个线程可能 共享某些资源。比如,一个线程要读取数据,另外 一个线程要处理这些数据。因此,系统必须对线程 进行同步控制,等到第一个线程读取完数据,第二 个线程才能处理该数据,从而避免错误。 l 简单地说,在一个时刻只能够被一个线程访问 的资源称为临界资源,而访问临界资源的那段代码 则被称为临界区。临界区的使用必须互斥地进行, 即一个线程在临界区中执行代码时,其它线程不能 够进入临界区。 synchronized l Java中,引入了对象”互斥锁”的概念,来保证共享数据 操作的完整性。每个Java对象都对应于一个”互斥锁”标记, 这个标记用来保证在任一时刻,只能有一个线程访问该对 象。一旦某个线程获得了该锁,别的线程如果希望获得该 锁,只能等待这个线程释放锁之后。 l 关键字synchronized用来与对象的互斥锁联系。当某个 对象用synchronized 修饰时,表明该对象在任一时刻只能 由一个线程访问。此时,如果有第二个线程也要访问同一 个对象,它也试图获取该对象的互斥锁,但因该对象已经 被锁定,则第二个线程必须等待,直到锁被释放为止。 synchronized l 1、synchonized方法 synchronized 或 synchronized(this) synchronized l 2、synchronized块 将synchronized关键字加在某代码块之前,就可声明该代 码块为synchronized块,从而使该代码块成为互斥使用的 代码块,即其中的代码必须获得对象的锁方能执行。 synchronized 例:模拟银行中的存款、取款-1 public class Account private String name; private float amount; public synchronized void deposit(float amt) float tmp = amount; tmp += amt; try Thread.sleep(1); catch (InterruptedException e) amount = tmp; public float getBalance() return amount; 例:模拟银行中的存款、取款-2 public synchronized float withdraw(float amt) float tmp = amount; if (tmp = amt) tmp -= amt; else tmp = 0; System.out.println(“预取 “ + amt + “,剩余金额不足! 仅能取走 “ + amount); try Thread.sleep(1) catch (InterruptedException e) amount = tmp; return amount; 例:模拟银行中的存款、取款-3 public class DepositThread extends Thread /存款线程 private Account a1; private float amount; public DepositThread(Account a1, float amount) this.a1 = a1; this.amount = amount; 例:模拟银行中的存款、取款-4 public void run() synchronized (a1) float k = a1.getBalance(); try sleep(1);/模拟花费时间 catch (InterruptedException e) a1.deposit(amount); System.out.println(“现有“ + k + “,存入“ + amount + “,余额“ + a1.getBalance(); 例:模拟银行中的存款、取款-5 public class WithdrawThread extends Thread /取款线程 private Account a1; private float amount; public WithdrawThread(Account a1, float amount) this.a1 = a1; this.amount = amount; public void run() synchronized (a1) float k = a1.getBalance(); try sleep(1); /模拟花费时间 catch (InterruptedException e) float m = a1.withdraw(amount); 例:模拟银行中的存款、取款-6 public class AccountT
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 园艺设计实例分析试题及答案
- 农业经理人职业技能分析试题及答案
- 物质与精神面试题及答案
- 福建事业单位考试面试表现提升试题及答案
- 创新花艺师考试考题及答案
- 突破花艺师考试的关键点试题及答案
- 干花艺术应用的试题及答案
- 2024年农业职业经理人考试中的自我反省技巧试题及答案
- 2024园艺师考试经营管理试题及答案
- 检斤员考试题及答案
- 《中西医结合概论》期末考试题
- 高速铁路知识.ppt课件
- ADAScog(老年痴呆量表—认知)
- 药品经营中存在的问题及监管对策
- ZN73A(X)永磁式户内中压真空断路器
- sch壁厚等级对照表要点
- 水利工程供水定价成本监审办法
- 石头峡水电站水利枢纽工程坝体设计说明书毕业设计
- 储罐及输油管道拆除方案(完整版)
- 浅谈石油化工建设项目的工程造价管理与控制
- 2022年2022年雷锋叔叔你在哪里说课稿
评论
0/150
提交评论