线程
1、线程基本概念
进程:正在运行的应用程式
线程:(Thread)是进程中的一串连续的动作。
多线程:(MultiThread)通常指多串连续动作的并发执行
非主线程的线程都称为工作线程。
2、生活中的线程
做饭:煮饭的同时可炒菜。煮饭、炒菜均是线程
3、程序中的线程
4、Java中的线程框架
线程基类:SuperClass
接口:Runnable
5、Java中的线程模型
二.
1.进程定义?正在运行的程序
2.线程定义?进程中一串连续的操作
3.多线程的定义?进程中多串连续的操作
4.Java中线程框架?
1)Thread 类(通过此类构建线程对象)
2)Runnable 接口(通过此接口定义线程任务)
5.Java中线程的构建?
1)new Thread(){重写run方法}(相当于new线程对象的子类)
2)new Thread(new Runnable接口的实现类){}
6.Java中线程常用方法?
1)start() //启动线程
2)sleep() //设置线程处于休眠状态
3)interrupt() //中断线程
4)yeild() //暂停当前线程,执行其他线程
5)setDeamon() //设置线程为守护线程
6)join() //插入,等待线程终止
7.Java线程中的几种状态?
1)新建
2)就绪
3)运行
4)阻塞
5)死亡
8. Java中线程的同步及实现方法?Synchronized关键字
1)线程同步:为了保证并发线程的线程安全
2)线程同步的实现方式:同步代码块、同步方法
线程同步
生产者/消费者
1、线程同步:借助对象监视器(同步锁互斥)实现线程交互
案例:售票系统,懒汉式单例
2、线程通讯:借助对象监视器(同步锁)实现线程交互
1)wait():调用此方法的线程等待,并释放线程锁
2)notify():通知具备相同锁的正在等待的线程开始执行
3)notifyAll():通知所有具备相同锁、正在等待的线程开始执行
课堂案例:生产者与消费者之间的通讯
线程调度(Timer类的应用)
在指定延迟之后激发一个或多个操作事件。
Timer:计时器
需求:每隔一秒输出一下当前时间
1)构建timer对象(查构造方法)
2)执行timer的相关方法(schedule),进行任务调度(查实例方法)
总结:使用Timer执行任务调度时,所有任务都串行执行的。
线程池(Thread pool)
1、它是什么?
|--->它是一个对象
|--->此对象对应内存中的一块区域。
|--->此区域中允许存储若干个线程。
|--->当我们的程序需要某个线程时,可以直接从池中取,
用完以后再放回池中。
2、使用线程池的目的?
|--->主要是提高系统的执行效率(空间效率,时间效率)
|--->线程池运用服务端或平台中居多
3、线程池如何构建?
1) Executors (对象工厂类):通过此类构建相关线程池对象
2) ExecutorService:
|--->管理线程池
|--->执行一些异步任务(多线程并发执行)
|--->execute(....)
|--->submit(.....)
3) ScheduledExecutorService (允许多线程并发任务调度)
|--->ExecutorService的子类
|--->运行执行一些线程调度(在某些时间间隔内执行某些任务)
|--->schedule(....)
|--->scheduleAtFixedRate(....): 间隔固定=任务执行时间+period
|--->scheduleWithFixedDelay(...):间隔固定=次数*delay
|--->....
4) 线程池的关闭:
|-->shutdown(): 任务完成后关闭
|-->shutdownnow(): 立即关闭(不管任务是否完成)
----------------------------------------------------------------
内容总结
1、线程同步 (售票,单例,生产者/消费者)
2、线程通讯 (生产者,消费者)
3、任务调度(单线程任务调度):Timer
4、线程池
|--->线程池构建
|--->从线程池中获取线程
|--->通过线程执行任务 (考虑多线程任务调度)
|--->所有任务执行完以后考虑线程池的关闭
---------------------------------------------------------------
Java中ThreadLocal类的应用
--------------------------------------------------------------------------------
1.类说明
ThreadLocal是SUN公司提供的一个类,能将某个对象绑定到当前线程,也可从当前线程获取某个对象。
2.相关方法的应用
1)set方法:将对象绑定到当前线程
2)get方法:从当前线程获取某个对象
3)remove方法:从当前线程移除某个对象