企业级:JavaEE
流 集合
面向对象特点:封装 继承 多态
属性的赋值:接口 构造方法
流的应用 常用的字节流 常用的字符流 文件的操作
泛型(常见的集合)
线程简介
java中创建多线程
多线程的同步和死锁
线程简介
程序执行的时候会产生一个进程,一个进程会产生至少一个线程(主线程)
(理解线程概念,掌握区别 生命周期 状态)
程序 进程 线程
- 程序是一段静态的代码,是应用软件执行的蓝本,程序段是程序的一部分
- 进程是程序的一次动态执行过程,它对应了从代码加载、执行至执行完毕的一个完整过程,这个过程也是进程本身从产生、发展至消亡的过程
- 线程
java中的线程
- 每个java程序都有一个默认的主线程
- 当JVM加载代码发现**main方法**之后,就会立即启动一个线程,这个线程成为主线程
- 主线程的特点
- 是产生其他子线程的线程
- 不一定是最后完成执行的线程
- 主线程和线程是并行执行的,完成先后不定
- 如果**main方法中没有创建其他的线程**,那么当main方法执行完最后一个语句,JVM就会结束Java应用程序——**单线程(主线程)**
- 如果**main方法中又创建了其他线程**,那么JVM就要在主线程和其他线程之间轮流切换,JVM要等程序中所有线程都结束之后才结束程序——多线程
多线程的优势:
提高效率
- 减轻编写交互频繁、涉及面多的程序的困难
- 程序的吞吐量会得到改善
- 由多个处理器的系统,可以**并发(同时 并行)**运行不同的线程.(否则,任何时刻只有一个线程在运行)
- “同时”执行是人的感觉,在线程之间实际上轮换执行
多线程的使用场景
- 同时处理多件事
- 多个线程分解大任务
线程的生命周期
新建 就绪 运行 阻塞 死亡
面向对象:更符合人的思维方式
java运行基础:
继承Thread类,重写.run方法。执行.strat方法。
新建(thread类) 就绪 运行 阻塞 死亡
调用start() 后处于就绪状态,CPU允许之后执行run() 方法
运行结束之后处于死亡状态
运行中的线程,如果因为条件不具备而导致阻塞状态;
当阻塞状态拥有继续执行的条件之后会处于就绪状态(不可以直接转换成运行状态)
只有 运行状态 和 阻塞状态 是活的状态
运行状态和就绪状态可以相互转换
- 新建状态:线程对象已经创建,还没有在其上调用start()方法
- 可运行状态:当线程调用start方法,但调度程序还没有把它选定为运行线程时线程所处的状态
- 运行状态:线程调度程序从可运行池中选择一个线程作为当前线程时线程所处的状态。这也是线程进入运行状态的唯一方式
- 等待/阻塞/睡眠状态:其共同点是:线程仍旧是活的,但是当前没有条件运行。它是可运行的,当某件事件出现(具备了资源),他可能返回到可运行状态
- 死亡状态:当线程的run()方法完成时就认为它死去。线程一旦死亡,就不能复生。 一个死去的线程上调用start()方法,会抛出java.lang.IllegalThreadStateException异常
yield()方法不一定生效