基本概念
- 程序是指令和数据的有序集合,其本身没有任何运行的含义,是一个静态的概念。
- 进程则是执行程序的一次执行过程,它是一个动态的概念。是系统资源分配的单位。
- 通常在一个进程中可以包含若干个线程,当然一个进程中至少有一个线程,不然没有存在的意义,线程是CPU调度和执行的单位。
- 线程就是独立的执行路径。
- 每个线程在做自己的工作内存交互,内存控制不当会造成数据不一致。
线程的三种创建方式
-
继承Thread类接口(重点)
继承Thread类,重写run()方法,调用start开启线程 -
实现Runnable接口(重点)推荐使用
实现runnable接口,重写run方法,执行线程需要丢入runnable接口实现类,调用start方法。 -
实现Callable接口(了解)
静态代理
真实对象和代理对象都要实现同一个接口,代理对象要代理真实角色
好处:代理对象可以做很多真实对象做不了的事情 真实对象专注做自己的事情。
Lambda表达式
要理解Function Interface(函数式接口)是学习Java8 lambda表达式的关键坐在。
函数式接口的定义:
任何接口,如果只包含唯一一个抽象方法(就一个方法),那么它就是一个函数式接口。
对于函数式接口,我们可以通过lambda表达式来创建该接口的对象。
线程状态
停止线程
线程休眠
- sleep(时间)指定当前线程阻塞的毫秒数
- sleep存在异常InterruptedException
- sleep时间到达后线程进入就绪状态 ‘=
- sleep可以模拟网络延时,倒计时等。 每个对象
- 都有一个锁,sleep不会释放锁
线程礼让
。yield
线程状态
守护线程
线程分为用户线程和守护线程
虚拟机必须保护用户线程执行完毕
虚拟机不用等待守护线程执行完毕
如,后台记录操作日志,监控内存,垃圾回收等等
守护同步
并发 同一个对象被多个线程同时操作