复习八(多线程)
Posted hq0422
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了复习八(多线程)相关的知识,希望对你有一定的参考价值。
1.进程:进程是应用程序执行的实例,进程有独立的内存空间和系统资源
2.线程:线程是cpu调度和分配的基本单位,线程是进程中执行运算的最小单位,可以完成一个独立的顺序控制流程
一个进程中同时运行了多个线程用来完成不同的工作称之为多线程
多线程是交替占用cpu资源而并非真正的一起执行
多线程优点:
1.充分利用CPU资源
2.简化编程模型
3.带来良好的用户体验
java提供了java.long.Thread类支持线程编程
主线程:main()方法为主线程入口,产生其他子线程的线程必须最后完成执行因为他执行各种关闭操作
获取主线程对象:
Thread thread=Thread.currentThread();
创建线程:
1.继承Thread类
1.定义一个类继承Thread
2.重写run方法
3.使用start()方法启动线程
2.实现Runnable接口
Threa thread=new Thread(实现接口的类名);
thread.start();
继承Thread 类编写简单可以直接操作线程适用于单线程
实现Runnable类 避免了单继承的局限性便于共享资源
线程调度:按照特定的机制为多个线程分配cpu资源的使用权
线程方法:
.setPriority(等级) :设置线程优先级 默认为5 数越大优先等级越高
.sleep(毫秒数) :线程睡眠
.join() :强制执行
.yield() :暂停本线程执行其他线程(该线程状态处于就绪状态而不是阻塞状态)
.interrupt() :中断线程
.isAlive() :测试线程是否处于活动状态
线程的礼让只是提供了一种可能,但不一定会实现
当多个线程操控同一个数据时会造成数据不安全问题,可以使用Synchronized修饰方法控制对类成员的访问,控制资源一次只能一个线程进行操作
例:
public Synchronized void 方法名(){ } 或 synchronized(同步对象 ,this表示当前对象){ }
当一个线程访问一个同步代码块时其他的所有线程都不能访问,除非代码块不是同步的
方法是否同步 效率 适合的场景
线程安全: 是 低 多线程共同开发
非线程安全: 否 高 单线程
线程池: 因为线程缺乏统一管理占用过多的系统资源,缺乏更多的功能入定时执行定期执行等功能所有产生了线程池
线程池的好处:
1.重用存在的线程减少对象创建,消亡的开销
2.有效的控制最大并发数提高系统资源使用率
3.定时执行与定期执行
线程池所在的包:java.util.Concurrent 顶级接口为 Executor 实现线程池的类是 ExecutorService
java.util.Concurrent.Executors 类提供创建线程池的方法
new CachcdThreadPool(); 创建一个可缓存的线程池
new SingleThreadExecutor(); 创建一个单线程的线程池 只有一个线程
new FixedThreadPool(线程数量);创建一个固定的线程池
new ScheduledThreadPool(线程数量);创建一个固定长度的线程池可以设置定时来执行
以上是关于复习八(多线程)的主要内容,如果未能解决你的问题,请参考以下文章