多线程
多线程:
什么是线程:
线程就是程序中单个的顺序执行流程,是一条执行路径;
单线程:一个进程中如果有一条执行路径就是单线程
多线程:一个程序中如果有多条执行路径就是多选线程.
线程和进程的关系:
进程负责获取资源,进程负责执行任务.一个进程中至少有一个线程.
多线程的作用:
提高cpu的执行效率
在java中实现线程的两种方式
方式一: 继承thread类
方式二:实现Ranable接口
线程类中的两个方法:
run方法:业务代码的重构 ,start方法启动线程
设置和获取线程名称
setName()设置线程名
getName 返回此线程的名称
CurrenThread 获取正在活动的线程对象的引用
线程的优先级
在java中线程的优先级有10级 最高为10 最低为1
最高级和最低级没有必然的优先关系,只是有概率优先.\
线程的调度模式
java中的线程调度模式为抢占式调度模式
还有分时调度模型
线程控制
sleep (毫秒数)使当前正在执行的线程停留指定的毫秒数(此方法会占用cpu时间片)
join() 等待这个线程死亡,才会执行别的线程
setDaemeon(true) 设置线程为守护线程
线程的生命周期
创建-->启动 ->就绪->运行->死亡(变成垃圾被回收)
多线程引发的一系列问题
多线程会引发多个线程操作一个数据区时导致数据出现安全问题
1数据安全问题出现的条件
1多线程环境
2共享数据
3多条语句操作共享数据
如何解决多线程问题
基本思想:让程序没有安全问题的环境
1奖代码锁起来,任意时刻只能有一个想成执行
1 同步代码块
2同步方法 锁是this
3同步静态方法 锁是类名,class 是字节码文件
线程安全的类 有什么
1StringBuffer
2vector 该类在1.2版本后 java collections framework 成员 该类实现了list接口
lock锁
lock是一个接口不能被实例化 因此我们将借助它的实现类ReentrantLock来进行实例化
lock l = new ReentrantLock();
lock锁对象提供两个方法
1lock()加锁
2unlock()解锁
多线程中的经典案例 生产者消费之
所谓生产者模式 包含了连个线程 1一个是生产者线程 2 一个是消费者线程
为了解耦生产者和消费者之间的关系,通常会采用数据个公共区,并不需要关心生产者的行为
objiect类的等待和唤醒方法
notyify() 唤醒正在等待对象监视器的单个线程,自己进入监听状态
notyifuall() 唤醒所有等待对象监视器的单个线程,自己进入监听状态
wait() 导致当前线程进入监听状态,直到另一个线程调用该对象的notifiy方法.