




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、能力目标:能力目标:n理解多线程、掌握线程的创建、启动、运行等方法。理解多线程、掌握线程的创建、启动、运行等方法。n掌握线程优先级及其设置方法。掌握线程优先级及其设置方法。n理解线程状态,线程中断和线程同步等概念。理解线程状态,线程中断和线程同步等概念。n能使用多线程编写龟兔赛跑程序和生产者消费者程序。能使用多线程编写龟兔赛跑程序和生产者消费者程序。/n13.1 任务预览任务预览n13.2 程序、进程与线程程序、进程与线程n13.3 多线程多线程n13.4 线程类线程类threadn13.5 线程同步与互斥线程同步与互斥n13.6 本章小结本章小结n13.7 实训实训13:龟兔赛跑、生产者与消
2、费者:龟兔赛跑、生产者与消费者/n本章实训程序运行结果:本章实训程序运行结果: /n程序,是代码,是静态的。程序,是代码,是静态的。n进程,是程序在计算机上的一次运行过程,进程是动态的。进程,是程序在计算机上的一次运行过程,进程是动态的。n线程也是动态的,是比进程更小的概念,它是进程(程序运线程也是动态的,是比进程更小的概念,它是进程(程序运行过程)的一条执行路线。行过程)的一条执行路线。njava语言拥有多线程机制。语言拥有多线程机制。njava.lang包提供线程类包提供线程类thread,只要定义继承,只要定义继承thread类类的子类,并重写线程运行方法的子类,并重写线程运行方法run
3、。n线程类的每一个对象都是一个线程,通过线程类的每一个对象都是一个线程,通过start方法启动。方法启动。/class animal extends thread /线程类线程类public animal(string name) /构造方法,参数是线程名构造方法,参数是线程名 super(name);public void run() /线程运行方法线程运行方法 for(int i=0; i=100; i+=10) if (this.getname().equals(乌龟乌龟)system.out.println(tt乌龟跑了乌龟跑了+ i + 米米); else system.out.pr
4、intln(this.getname() + 跑了跑了+ i + 米米); trythread.sleep(long)(math.random()*1000); /休眠不超过休眠不超过1秒秒 catch(interruptedexception e) /public class example1 /运行主类运行主类public static void main(string args) animal rabbit = new animal(兔子兔子); /线程线程(对象对象)1animal tortoise = new animal(乌龟乌龟); /线程线程(对象对象)2rabbit.star
5、t(); /启动线程启动线程1tortoise.start(); /启动线程启动线程2 /n(1)编写)编写thread子类,即线程类,格式:子类,即线程类,格式:class 线程类名称线程类名称 extends thread .public void run() . /线程运行方法线程运行方法n如:如: class animal extends thread . n(2)构建线程对象。如:)构建线程对象。如:animal rabbit = new animal(兔子兔子); /线程线程(对象对象)1animal tortoise = new animal(乌龟乌龟); /线程线程(对象对象)
6、2n(3)调用线程对象的)调用线程对象的start方法启动线程。如:方法启动线程。如:rabbit.start(); /启动线程启动线程1tortoise.start(); /启动线程启动线程2n注:主类注:主类main方法也是一条独立的执行路线(线程)。方法也是一条独立的执行路线(线程)。 /n(1)编写实现)编写实现runnable接口的类,格式:接口的类,格式:class 类名类名 extends 父类父类implements runnable .public void run() . /线程运行方法线程运行方法n(2)构建实现)构建实现runnable接口类的对象。如:接口类的对象。如
7、:new animal2(兔子兔子“)new animal2(乌龟乌龟)n(3)使用上述对象作参数,构造)使用上述对象作参数,构造thread对象。如:对象。如:thread rabbit = new thread(new animal2(兔子兔子);thread tortoise = new thread(new animal2(乌龟乌龟n(4)最后调用)最后调用start方法启动线程。方法启动线程。/class animal2 implements runnable private string name;public animal2(string name) = na
8、me; public string getname() return name; public void run() /线程运行方法线程运行方法 for(int i=0; i=100; i+=10) if (this.getname().equals(乌龟乌龟)system.out.println(tt乌龟跑了乌龟跑了+ i + 米米); else system.out.println(this.getname() + 跑了跑了+ i + 米米); try thread.sleep(long)(math.random()*1000); catch(interruptedexception e)
9、 thread rabbit = new thread(new animal2(兔子兔子);thread tortoise = new thread(new animal2(乌龟乌龟);rabbit.start(); tortoise.start(); /nthread类的类头声明:类的类头声明: public class thread extends object implements runnablen每个线程对象都有名称,如果没有在构造方法中指定,则按每个线程对象都有名称,如果没有在构造方法中指定,则按“thread-”+ n的形式自动命名,也可用的形式自动命名,也可用setname(s
10、tring name) 方法设定。方法设定。n常用构造方法:常用构造方法:(1)thread()。自动起名,用方法。自动起名,用方法getname()获取线程名。获取线程名。(2)thread(string name):要指定线程名作参数。:要指定线程名作参数。(3)thread(runnable target):也是自动起名。:也是自动起名。(4)thread(runnable target, string name)。/n线程有线程有10个优先级,从高至低分别是个优先级,从高至低分别是10、9、1。中间。中间级为级为5,它是线程默认的优先级。,它是线程默认的优先级。nthread类有类有3
11、个关于优先级的整型静态常量字段:个关于优先级的整型静态常量字段:(1)max_priority:最大优先级,值是:最大优先级,值是10。(2)min_priority:最小优先级,值是:最小优先级,值是1。(3)norm_priority,普通优先级,值是,普通优先级,值是5。n方法方法setpriority(int newpriority)用于设置线程优先级,用于设置线程优先级,n方法方法getpriority()用于获取线程优先级。用于获取线程优先级。/class animal3 extends thread public animal3(string name) super(name);
12、 public void run() for(int i=0; i0) balance += money; notify();println(成功存款¥成功存款¥+ money + ,余额¥,余额¥ + balance); else system.out.println(存款失败存款失败); public synchronized void withdraw(double money) /同步取款同步取款 if (money0) while (moneybalance) try wait(); catch(interruptedexception e) balance -= money; pr
13、intln(成功取款¥成功取款¥+ money + ,余额¥,余额¥ + balance); else system.out.println(取款失败取款失败); public double getbalance() return balance; public string getname() return name; /class depositthread extends thread account acc; /存款线程类存款线程类 public depositthread(account a) acc = a; public void run() for(int i=0; i5; i
14、+) /存款存款5次次 acc.deposit(int)(math.random()*1000); /每次每次1000class withdrawthread extends thread /取款线程类取款线程类account acc;public withdrawthread(account a) acc = a; public void run() for(int i=0; i= max) /若产品数超出最大库存量若产品数超出最大库存量 try wait(); catch(exception e) /则等待则等待 this.num +; /直到被通知唤醒才生产直到被通知唤醒才生产 seri
15、alnum +; notify(); /通知消费通知消费 (生产编号生产编号+ serialnum + name + ,当前库存数:,当前库存数:+ num); public synchronized void output() /同步的消费同步的消费(出仓出仓)方法方法 while (num = 0) /若库存没有产品若库存没有产品 try wait(); catch(exception e) /则等待则等待 this.num -; /直到被通知唤醒才消费直到被通知唤醒才消费 notify(); /通知生产通知生产(消费编号消费编号+ name+,当前库存数:,当前库存数:+num); /c
16、lass producer extends thread /生产者类生产者类storage store;public producer(storage store) this.store = store; public void run() for(int i=0; i10; i+) store.input(); /调用同步生产方法调用同步生产方法 class consumer extends thread /消费者类消费者类storage store;public consumer(storage store) this.store = store; public void run() fo
17、r(int i=0; i10; i+) store.output(); /调用同步消费方法调用同步消费方法 storage store = new storage(洗衣机洗衣机, 3); /库存库存3洗衣机仓库洗衣机仓库 producer producer = new producer(store); /生产者生产者consumer consumer = new consumer(store); /消费者消费者producer.start();consumer.start();/n线程是比进程更小的概念。线程是比进程更小的概念。n编写多线程程序涉及到线程类编写多线程程序涉及到线程类thread
18、。n编写多线程程序有两种方式:一是编写编写多线程程序有两种方式:一是编写thread子类并构造子类并构造其对象,二是编写实现其对象,二是编写实现runnable接口的类,再用该类对象接口的类,再用该类对象作参数构造作参数构造thread对象。对象。n线程的执行路线通过线程的执行路线通过run方法实现。方法实现。n线程按其重要程度分成线程按其重要程度分成10个优先级,缺省是个优先级,缺省是5。n线程的状态可概括为线程的状态可概括为4种:新建、运行、暂停(阻塞及等种:新建、运行、暂停(阻塞及等待)、死亡。待)、死亡。n多线程并发执行,涉及共享的临界资源冲突问题。如公司账多线程并发执行,涉及共享的临界资源冲突问题。如公司账户,工厂产品等,宏观上同时被多个线程使用,但微观上在户,工厂产品等,宏观上同时被多个线程使用,但微观上在某一时刻只能被一个线程独占使用。某一时刻只能被一个线程独占使用。n线程同步与互斥最典型的应用是生产者与消费者模型。线程同步与互斥最典型的应用是生产者与消费者
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 医疗AI辅助诊断系统的技术原理与优势
- 脑损伤后综合征的临床护理
- 9月工作总结模版
- 公司材料欠款合同范例
- 人音版音乐四上摇篮曲舒伯特教学设计
- 医疗领域的教育与人才培养全案设计
- app平台 合同范例
- 保洁用品供货合同范例
- 产品招商加盟合同范例
- 保证中标居间协议合同范例
- 佳力图ME系列空调日常操作维护
- 肩难产的处理PPT
- 一年级数学下册-应用题专项练习
- 2021人教版新教材高中英语必修三全册课文翻译(中英文Word)
- 研究生入学体检表
- 工控培训教程、手册合集倍福plc从入门到精通
- 三年级下册美术教案-第11课 门票设计-非遗馆|浙美版
- I-am-a-bunny-绘本教学课件
- 养老院 入住申请表
- TwinCAT-CNC-入门教程
- 基于android平台的实时公交查询系统方案
评论
0/150
提交评论