Thread 多线程
LOGO Thread 多线程
前言 本章内容是 Core Java的一个难点,如何设计一个 安全、并发的多线程程序,对于一个程序员来说是 一个比较有挑战性的任务,因为你要站在机器的角 度去考虑问题。 到目前为止,大家写的Application都是单线程程序, 也就是启动的java程序在“同一时间”内只会做一 件事。有时需要程序“同时”可以做很多事,即所 谓多线程( Multi-thread-)程序。在以后的 jsp/servlet学习中,了解多线程也是很重要的。 例: SingleThread.java www.themegallery. com Company Logo
Company Logo www.themegallery.com 前言 本章内容是Core Java的一个难点,如何设计一个 安全、并发的多线程程序,对于一个程序员来说是 一个比较有挑战性的任务,因为你要站在机器的角 度去考虑问题。 到目前为止,大家写的Application都是单线程程序, 也就是启动的java程序在“同一时间”内只会做一 件事。有时需要程序“同时”可以做很多事,即所 谓多线程(Multi-thread)程序。在以后的 jsp/servlet学习中,了解多线程也是很重要的。 例:SingleThread.java
线程基本概念 进程:应用程序,一个可执行的程序统称 线程:一个轻量级的进程。一个进程可以有多个线程 如何理解呢? 进程的公共部分(如成员变量) 进程中独立运行的线程 www.themegallery.com Company Logo
Company Logo www.themegallery.com 线程基本概念 进程:应用程序,一个可执行的程序统称 线程:一个轻量级的进程。一个进程可以有多个线程 如何理解呢? 进程的公共部分(如成员变量) 进程中独立运行的线程
Data 对什么做操作 线程三要素 CPU Code 做什么 何时做 Java设计多线程程序的四种模式 E 1、不共享代码,也不共享数据 2、共享代码,不共享数据 内存缓冲区 3、不共享代码,共享数据 4、既共穿代码,也共享数据—迅雷下载资源 www.themegallery.com Company Logo
Company Logo www.themegallery.com CPU 何时做 Code 做什么 Data 对什么做操作 线程三要素 Java设计多线程程序的四种模式: 1、不共享代码,也不共享数据 2、共享代码, 不共享数据 3、不共享代码,共享数据 4、既共享代码,也共享数据 IE 内存缓冲区 迅雷下载资源
多线程的实现方式: 、继承 kjava. lang. Thread类,并覆盖run() class A extends Thread public void run ()( new AO.start 2、实现 java lang Runnable接口 class B im plements Runnable public void run(t) new Thread (new BO).start www.themegallery.com Company Logo
Company Logo www.themegallery.com 多线程的实现方式: 1、继承java.lang.Thread类,并覆盖run() class A extends Thread{ public void run(){ } } new A().start(); 2、实现java.lang.Runnable接口 class B implements Runnable{ public void run(){ } } new Thread(new B() ).start();
线程控制的基本方法 boo| ean isAlive()判断线程是否还“活”着,即线程是否还未终止 nt getPriority()获得线程的优先级数值 void setPriority()设置线程的优先级数值 static void sleep( long millis)将当前线程睡眠指定毫秒数 void join()调用某线程的该方法,将当前线程与该线程“合并”,即 待该线程结束,在恢复当前线程的运行 static void yield()主动让出cpu,当前线程进入就绪队列等待调度 void wait()当前线程进入对象的 wait pool void notify()/ notify()唤醒对象的 wait pool中的一个/所有等待线程 static Thread current tread0返回当前正在执行线程的引用 void setName()给线程一个名字 String getName()得到线程的名字 long gtld()OS分配的一个标识 www.themegallery.com Company Logo
Company Logo www.themegallery.com 线程控制的基本方法 boolean isAlive() 判断线程是否还“活”着,即线程是否还未终止 Int getPriority()获得线程的优先级数值 void setPriority()设置线程的优先级数值 static void sleep(long millis)将当前线程睡眠指定毫秒数 void join() 调用某线程的该方法,将当前线程与该线程“合并”,即 等 待该线 程结束,在恢复当前线程的运行 static void yield()主动让出cpu,当前线程进入就绪队列等待调度 void wait() 当前线程进入对象的wait pool void notify()/notifyAll( ) 唤醒对象的wait pool中的一个/所有等待线程 static Thread currentTread() 返回当前正在执行线程的引用 void setName()给线程一个名字 String getName()得到线程的名字 long getId()OS分配的一个标识
线程的生命周期 start Runable new notify () 时间到 yield ( OS Running Sleep Block poo wait () 运行结束 wait pool Dead www.themegallery.com Company Logo
Company Logo www.themegallery.com 线程的生命周期 new Running Runable Block pool Dead start() OS sleep() wait() notify() yield() 时间到 运行结束 wait pool
Java设计多线程程序的四种模式 1、不共享代码,也不共享数据 两个概念: 当前线程对象:ths 当前正在执行的线程对象 Thread, currentThread( 例: ThreadTesta 2、不共享代码,共享数据 例: ThreadTestB www.themegallery.com Company Logo
Company Logo www.themegallery.com 1、不共享代码,也不共享数据 两个概念: 当前线程对象:this 当前正在执行的线程对象 Thread.currentThread() 例:ThreadTestA 2、不共享代码,共享数据 例:ThreadTestB Java设计多线程程序的四种模式
Java设计多线程程序的四种模式 3、共享代码,也共享数据-使用 I synchronized同步 多线程并发访问数据的安全性问题:加锁的机制 关键字: Synchronized射象实例) 府象的锁标记 例: Threadtestc 网上银行转账 (A>10000){ 线程转换了!后果? A=A-10000, B=B+10000, www.themegallery.com Company Logo
Company Logo www.themegallery.com Java设计多线程程序的四种模式 3、共享代码,也共享数据--使用synchronized同步 多线程并发访问数据的安全性问题:加锁的机制 关键字:Synchronized( 对象实例 ) 对象的锁标记 例:ThreadTestC 网上银行转账: If(A>10000){ A=A-10000; B=B+10000; } 线程转换了!后果?
不共享代码,共享数据 最经典的多线程例子:生产者一消费者 生产者 消费者 仓库 例: Thread TestD. java 注:在JAVA语言中,程序运行完成的条件:所有 线程都运行结東,不一定是主线程运行结束 例:建国六十周年倒计时牌: TimeFrame java www.themegallery.com Company Logo
Company Logo www.themegallery.com 4、不共享代码,共享数据 最经典的多线程例子:生产者—消费者 仓库 生产者 消费者 例:ThreadTestD.java 注:在JAVA语言中,程序运行完成的条件:所有 线程都运行结束,不一定是主线程运行结束 例:建国六十周年倒计时牌:TimeFrame.java