学习目标
●多线程
○线程安全
○线程死锁
○线程状态
○线程通信
○线程池
1. 多线程
1.1 多线程能解决什么问题 ?
能解决电脑处理多个任务,提高任务的执行性能
1.2 解决线程安全问题的方式有哪些 ?
格式 | 注意 | |
---|---|---|
同步代码块 | synchronized(同步锁){ 多个线程访问共享数据的代码 } |
1.是一个对象 可以是任意类型任意对象 2.多个线程需要使用同一个锁对象(锁对象唯一) |
同步方法 | 修饰符 synchronized返回值类型 方法名(方法参数) { } | 1.对于非static方法,同步锁就是this。 2.对于static方法,我们使用当前方法所在类的字节码对象(类名.class), Class类型的对象 |
锁机制,Lock | Lock中提供了获得锁和释放锁的方法 lvoid lock():获得锁 lvoid unlock():释放锁 |
多个线程使用相同的Lock锁对象,需要多线程操作数据的代码放在lock()和unLock()方法之间。一定要确保unlock最后能够调用 |
2.3 线程池存在的优势 ?
1.降低资源消耗
2.提高响应速度
3.体改线程的可管理性
2.4 线程池能处理什么任务 ?
线程池其实就是一个容纳多个线程的容器,其中的线程可以反复使用,省去了频繁创建线程对象的操作,无需反复创建线程而消耗过多资源。
2.5 线程有几种实现方式 ?
构造方法 | 实现步骤 | |
---|---|---|
实现Runnable接口 | public Thread(Runnable target) public Thread(Runnalbe target , String name) |
定义任务类实现Runnable,并重写run方法 创建任务对象 使用含有Runnable参数的构造方法,创建线程对象并指定任务。 调用线程的start方法,开启线程 |
继承Thread类 | public void run() public void start() | 创建一个类继承Thread类。在类中重写run方法(线程执行的任务放在这里) 创建线程对象,调用线程的start方法开启线程。 执行程序,观察控制台的打印数据的现象 |
2.6 线程间的通信能解决什么问题 ?
能实现多个线程协作共同完成同一任务的问题
2. 当日问题小结
2.1 当日遇到的问题
2.2 出现问题原因
2.3 解决问题方案
若有收获,就点个赞吧