什么是JUC?
就是java.util.concurrent、java.util.atomic、java.utils.concurrent.locks包。
回复一下创建线程的方式:
- Thread类只是一个线程类
- Runnable接口没有返回值,而且效率低
- callabel效率高,一般多的使用它
进程和线程
-
进程:就是一个程序,如QQ、微信等 一个进程中可以包含多个线程,至少也包含一个线程
-
线程:java默认有两个线程,一个是main线程,一个是GC垃圾回收线程 比如我开了一个idea,idea是一个进程,但是我输入代码就是一个线程,自动保存也是一个线程
-
重点:java是不能开线程的,它只能通过本地方法去调用底层的C++,C++给java开线程来实现多线程
并发和并行
- 并发(多线程去操作同一个资源): 就是1核cpu,模拟多线程的形式去执行,说白了就是快速切换不同的线程,显得好像是所有程序都在并行
- 并行: 就是多核cpu,这样就能实现并行,多个线程各干各的,同时执行
并发编程的本质:
就是为了充分利用cpu资源,提高代码的执行效率,降低时间成本
线程有六个状态
Thread.State类中列举了所有线程的状态
1. 初始化线程
2. 运行线程
3. 阻塞线程
4. 等待线程(没有超时时间,一直等待)
5. 超时等待(有超时时间,等到超时时间就不等了)
6. 终止线程
wait和sleep的区别
1. 来自不同的类
wait => Object
sleep => Thread
2. 释放锁
wait会释放锁
sleep不会释放锁
3. 是否范围不同
wait必须在同步代码块中使用
sleep可以在任何地方使用