1.JUC概述

JUC: java.utils.concurrent的简称
java.utils 工具包、包、分类
业务:普通线程代码 Thread
Runnable 没有返回值、效率相比于Callable相对较低。
2. 进程和线程
见多线程部分 对于Java来说,三种创建线程的方式:Thread、Runnable、Callable
Java真的可以开启线程么? 不可以
private native void start0(); 是通过调用本地方法来实现的,c++。Java无法直接操作硬件
并发编程:并发、并行
并发:多线程操作同一个资源
- CPU一核,模拟出来多条线程,快速交替
并行:多个线程同时执行
- CPU多核,多个线程可以同时执行
public class Test1 {public static void main(String[] args) {//获取CPU核心数// CPU密集型,IO密集型System.out.println(Runtime.getRuntime().availableProcessors());}}
线程有几个状态?
线程中的状态主要有6种:
- 初始(NEW):新创建了一个线程对象,但还没有调用start()方法。
- 运行(RUNNABLE):Java线程中将就绪(ready)和运行中(running)两种状态笼统的称为“运行”。
线程对象创建后,其他线程(比如main线程)调用了该对象的start()方法。该状态的线程位于可运行线程池中,等待被线程调度选中,获取CPU的使用权,此时处于就绪状态(ready)。就绪状态的线程在获得CPU时间片后变为运行中状态(running)。 - 阻塞(BLOCKED):表示线程阻塞于锁。
- 等待(WAITING):进入该状态的线程需要等待其他线程做出一些特定动作(通知或中断)。
- 超时等待(TIMED_WAITING):该状态不同于WAITING,它可以在指定的时间后自行返回。
- 终止(TERMINATED):表示该线程已经执行完毕。
线程状态图:
wait与sleep之间的区别?
- 来自不同的类
- wait->Object
- sleep->Thread
- 关于所得释放
- wait会释放锁,sleep不会释放锁
- 使用范围不同
- wait只能在同步代码块中使用
- sleep方法可以在任何地方使用
- 是否需要捕获异常
- wait不需要
- sleep需要
