开篇:
关于进程线程的小理解:
进程:就像是一个大车间 要完成的一项任务
线程:就是车间的流水线,多个流水线去完成这一项任务.
1.线程包含于进程内
2.一个进程中可能有多个线程
3.线程有自己的指令 线程与线程之间是独立的
4.同一个进程中的许多线程的资源是共享的(内存资源 文件)
不共享的资源 : 栈 上下文 状态 优先级 记账信息
线程:操作系统进行调度和执行的最小单位
操作系统管理进程的方式:
先描述:用PCB描述 内核只认PCB 一个线程–>一个PCB
一个进程–>多个PCB
再组织:用双向链表表示
多线程的缺点:
1.线程不安全
2.一个线程如果抛出异常但是没有很好的处理这个异常的话整个程序就会被直接终止 其他线程也就无法继续正常工作了
代码示例:
JAVA中如何使用多线程:
创建线程代码写法:(看注释)
1.直接继承Thread类
涉及两个线程 main(主线程)和Thread(用户创建的线程)
查看确实有两个线程(把两个线程搞成一个死循环)
Runnable:就绪状态
堆栈跟踪:线程的调用栈
2.通过匿名内部类的方式
3.显示创建一个类 实现Runnable接口
4.通过匿名内部类实现Runnable接口
5.使用lambda表达式
Thread的常见构造方法中:
Thread(String name) 可以给线程指定一个名字,为了调试的时候看起来更直观.
串行与多线程并发执行的时间比较:
串行执行:
时间:
并发执行:
结果:
结论:串行的时间大大缩短!
[面试题]: Thread中run和start的区别
1.run只是一个普通的方法调用没有创建新线程 输出语句是在原线程中执行的
2.start是创建一个新的线程 由新线程中进行输出
这两个调用的结果看似相同 然而一个创建了线程 一个并没有创建线程