多线程的作用就是开辟了多条路径。
一个线程就是独立的执行路径
线程的运行由调度器来安排调度 调度器与操作系统紧密相关
线程会带来额外的开销
创建线程的三种方式
1.extends Thread
2.implements Runnable
重写run方法(必须try catch)
new Thread(new 对象).start(); //不保证立即运行 由CPU调度
3.实现Callable 借口 有返回值(不常用)
call 可以有返回值 throw Exception
线程和lambda表达式结合
//jdk 简化 lambda
new Thread(()->{
for (int i = 0; i < 20; i++) {
System.out.println("一边听歌");
}
});
线程的五种状态
新生状态:New Thread();
就绪状态:start() 线程进入就绪状态
运行状态:线程被调度 获取cpu 进入运行状态
阻塞状态: sleep wait join 其他操作如 read write 等引起的阻塞事件让线程进入阻塞状态
阻塞事件解除后 线程重新进入就绪
死亡状态:
stop destroy。不建议使用
终止线程:
1.线程正常执行完毕
2.外部干涉--- 加入标识(不要使用 stop destroy)
提供一个boolean 型的终止变量
线程内关联标识
提供修改终止变量方法 外部改变
sleep yield join