线程,进程
Runnable 没有返回值,效率相比Callable相对较低。
进程:一个程序,QQ.exe,Music.exe 程序的集,一个线程往往可以包含多个线程,至少包含一个。java默认有两个线程,main、GC。
线程:开了一个进程Typora,写字,自动保存(线程负责的)。对于java而言:Thread、Runnable,Callable。
java真的可以开启线程吗?
开不了。本地方法,底层的C++,java无法操作
并发:(多线程操作同一个资源),CPU一核,模拟出来多条线程,快速交替。
并行:(多个人一起行走)CPU多核,多个线程可以同时执行。
并发编程的本质,充分利用cpu的资源。
public class test01 {
public static void main(String[] args) {
//获取cpu的核数
//密集型,IO密集型
System.out.println(Runtime.getRuntime().availableProcessors());
}
}
回顾多线程
线程有几个状态:代码里的:新生,运行,堵塞,等待,超时等待,终止。
wait/sleep的区别:
- 来自不同的类,wait-》Object类,sleep-》Thread
- 有没有释放锁,wait会,sleep不会
- 使用的范围不同,sleep可以在任何地方谁。wait必须在同步代码块,同步方法中
- 是否需要捕获异常,wait不需要捕获,sleep必须要捕获