Java程序设计基础(微课版)(活页式)电子课件11多线程
合集下载
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
System.out.println(threadName+"卖出第["+(tickets--) +"]张火车票.");
}
}
public static void main(String[] args) {
myRunnable myR = new myRunnable();//实现Runnable接口实现类
❖ 每个线程都是通过某个特定Thread对象所对应的run( )方 法来完成其操作的,run( )方法称为线程体。
❖ 使用start()方法,来启动线程,当一个线程运行就可以执 行该线程的run()方法。
继承Thread实现多线程
public class MyThread extends Thread { public void run() { //需要在线程中运行的代码写在run方法中 for (int i = 0; i < 100; i++) { //获得当前执行的线程的名称 System.out.println(Thread.currentThread().getName() + "---" + i); } } public static void main(String[] args) { MyThread myThread = new MyThread(); myThread.setName("myThread");//设置线程的名称 myThread.start();//启动线程 for(int i=0;i<100;i++){ System.out.println(Thread.currentThread().getName() + “***" + i); }
Java程序设计
第11章 多线程 11.1线程概述
11.2Java实现线程 11.3线程生命周期
目录
线程概述
Java中实现线程
基本要求:
线程生命周期
了解进程和线程的概念
掌握继承Thread类实现多线程(重点)
掌握实现Runnable接口实现多线程(重点)
理解线程生命周期
11.1线程概述
❖ 进程和线程都是一个控制流程。
使用Runnable类实现
public class myRunnable implements Runnable {
private int tickets = 100; //火车票数量
public void run() {
while (tickets > 0) {
String threadName=Thread.currentThread().getName();//获取线程名字
new Thread(myR).start();
new Thread(myR).start();
new Thread(myR).start();
new Thread(myR).start();
}ห้องสมุดไป่ตู้
}
实现Ruaable,线程总共卖100张票[有共享数据]
两种线程创建方式的比较
现实Runnable接口 Runnable适合多个相同程序代码的线程去处理同一资源的情况
❖ 一个进程通常对应于一个程序。
❖ 一个被启动的程序可以由多个不同的线程构成。 ❖
11.2Java中实现多线程-继承Thread
❖ 一个Thread类的对象代表一个线程,而且只能代表一个 线程。
❖ 通过Thread类和它定义的对象,我们能获得当前线程对 象、获取某一线程的名称、可以实现控制线程暂停一段时 间等功能。
。把虚拟CPU(线程)同程序的代码、数据有效的分离,较好的 体现了面向对象的设计思想。 避免由于Java的单继承特性带来的局限性。也就是如果新建的类 要继承其他类的话,因为JAVA中不支持多继承,就只能实现 ng.Runnable接口。 继承Thread类 有利于程序的健壮性,代码能够被多个线程共享,代码与数据是 独立的。 继承Thread类 不能再继承他类了。
❖
时间片用完,系统会剥夺其占有的资源,让其他
线程有机会执行,
❖
优先级高的先执行
❖ 死亡(dead)
线程的生命周期
创建 new
解除阻塞
阻塞 Blocked
阻塞事件
dead 死亡
start()
就绪 Runnable
线程调度
运行 Running
run() 运行完毕
下课了
} }
实现Runnable接口
❖ 通过实现Runnable接口并实现接口中定义的唯一抽象方 法run(),可以创建一个线程。
❖public class MyThread2 implements Runnable{
public void run(){ //重写Runnable中的run抽象方法,写入需要执行的代码 for(int i=0;i<100;i++){ System.out.println(Thread.currentThread().getName()+"--"+i); }
}
}
public static void main(String[] args){
new MyThread().start();
new MyThread().start();
new MyThread().start();
new MyThread().start();
}
}
继承Thread,每个线程卖了100张票 [没有共享数据]
11.3线程的生命周期
❖ 与人有生老病死一样,线程也同样要经历
❖ 新建(new)
❖
和其它的Java对象一样,只分配内存空间和初始
化成员变量
❖ 就绪(runnable)
❖
调用了start方法后进入就绪状态,什么时候运行
取决线程调度器
❖ 运行(running)
❖
获得了时间片开始执行run方法体
❖ 阻塞(blocked)
} public static void main(String[] args){
MyThread2 my = new MyThread2();//创建一个Runnable接口实现类 Thread thread = new Thread(my);//把my传递给Thread类 thread.setName("线程-1"); thread.start(); for(int i = 0;i<100;i++){
public class MyThread extends Thread { private int tickets = 100; // 车票数量 public void run() { while (tickets > 0) { System.out.println(this.getName()+"卖出第["+(tickets--)+"]张火车票");
System.out.println(Thread.currentThread().getName()+"***"+i); } } }
分析两种实现多线程的方式:
写一个程序,模拟4个售票窗口共同卖100张火车票的程序。 使用继承Thread类方式实现。 使用实现Runnable接口方式实现。
使用Thread类实现