[TOC]
<br/>
> ### 基本概念
* 线程和进程
* 同步和异步
* 并发和并行
* 阻塞和非阻塞
<br/>
> ### 线程状态
![](https://upload-images.jianshu.io/upload_images/3130736-3d55916e36a4770e?imageMogr2/auto-orient/strip%7CimageView2/2/w/700/format/webp)
* 1、**新建状态**`New`:线程对象被创建后,就进入了新建状态。例如,`Thread thread = new Thread()`
* 2、**就绪状态**`Runnable`: 也被称为“可执行状态”。线程对象被创建后,其它线程调用了该对象的`start()`方法,从而来启动该线程。例如,`thread.start()`,处于就绪状态的线程,随时可能被CPU调度执行。
* 3、**运行状态**`Running` : 线程获取CPU权限进行执行。需要注意的是,线程只能从就绪状态进入到运行状态。
* 4、**阻塞状态**`Blocked`: 阻塞状态是线程因为某种原因放弃CPU使用权,暂时停止运行。直到线程进入就绪状态,才有机会转到运行状态。阻塞的情况分三种:
* 等待阻塞 -- 通过调用对象的`wait()`方法、`condition.await`方法。
* 同步阻塞 -- 线程在获取`synchronized` 同步锁失败(因为锁被其它线程所占用),它会进入同步阻塞状态。
* 睡眠状态 -- 通过调用线程的`sleep()`或`join()`或发出了I/O请求时,线程会进入到其他阻塞状态。当`sleep()`状态超时、`join()`等待线程终止或者超时、或者I/O处理完毕时,线程重新转入就绪状态。
* 5、**死亡状态**`Dead`:线程执行完毕或者因异常退出了`run()`方法,该线程结束生命周期。
<br/>
> ### 使用多线程常见的三种方式
* 集成`Thread`类
```java
public class MyThread extends Thread {
@Override
public void run() {
super.run();
System.out.println("MyThread");
}
}
public class Run {
public static void main(String[] args) {
MyThread mythread = new MyThread();
mythread.start();
System.out.println("运行结束");
}
}
```
* 实现`Runnable`接口
```java
public class MyRunnable implements Runnable {
@Override
public void run() {
System.out.println("MyRunnable");
}
}
public class Run {
public static void main(String[] args) {
Runnable runnable = new MyRunnable();
Thread thread=new Thread(runnable);
thread.start();
System.out.println("运行结束!");
}
}
```
* 线程池
<br/>
>### Thread类中的方法
```java
//使该线程开始执行;Java 虚拟机调用该线程的 run 方法。
public void start()
//如果该线程是使用独立的 Runnable 运行对象构造的,则调用该 Runnable 对象的 run 方法;否则,该方法不执行任何操作并返回。
public void run()
//改变线程名称,使之与参数 name 相同。
public final void setName(String name)
//更改线程的优先级。
public final void setPriority(int priority)
//将该线程标记为守护线程或用户线程。
public final void setDaemon(boolean on)
//等待该线程终止的时间最长为 millis 毫秒。
public final void join(long millisec)
//中断线程。
public void interrupt()
//测试线程是否处于活动状态。
public final boolean isAlive()
//暂停当前正在执行的线程对象,并执行其他线程。
public static void yield()
//在指定的毫秒数内让当前正在执行的线程休眠(暂停执行),此操作受到系统计时器和调度程序精度和准确性的影响。
public static void sleep(long millisec)
//返回对当前正在执行的线程对象的引用。
public static Thread currentThread()
```
- asD
- Java
- Java基础
- Java编译器
- 反射
- collection
- IO
- JDK
- HashMap
- ConcurrentHashMap
- LinkedHashMap
- TreeMap
- 阻塞队列
- java语法
- String.format()
- JVM
- JVM内存、对象、类
- JVM GC
- JVM监控
- 多线程
- 基础概念
- volatile
- synchronized
- wait_notify
- join
- lock
- ThreadLocal
- AQS
- 线程池
- Spring
- IOC
- 特性介绍
- getBean()
- creatBean()
- createBeanInstance()
- populateBean()
- AOP
- 基本概念
- Spring处理请求的过程
- 注解
- 微服务
- 服务注册与发现
- etcd
- zk
- 大数据
- Java_spark
- 基础知识
- Thrift
- hdfs
- 计算机网络
- OSI七层模型
- HTTP
- SSL
- 数据库
- Redis
- mysql
- mybatis
- sql
- 容器
- docker
- k8s
- nginx
- tomcat
- 数据结构/算法
- 排序算法
- 快排
- 插入排序
- 归并排序
- 堆排序
- 计算时间复杂度
- leetcode
- LRU缓存
- B/B+ 树
- 跳跃表
- 设计模式
- 单例模式
- 装饰者模式
- 工厂模式
- 运维
- git
- 前端
- thymeleaf
- 其他
- 代码规范
- work_project
- Interview