🔥码云GVP开源项目 12k star Uniapp+ElementUI 功能强大 支持多语言、二开方便! 广告
[TOC] ## 线程 - 线程创建 创建一个线程类,需要继承`Thread`类或者实现`Runnable`接口,重写`run`方法 - 开启线程 开启一个线程需要执行`start()`方法 接口开启线程需要调用`Thread(Object <implement Runnable>)`构造方法创建 `Thread `对象.并使用该对象调用`start()`方法 >### 线程操作 - Objec里的方法 ``` wait() : 放弃当前线程执行权,释放锁,进入等待队列 notify() : 唤醒一个等待线程。 join() : 当调用join 方法的时候,当前线程会放弃执行权,直到join线程执行完毕。 yield();放弃当前执行权,重新竞争cpu执行权; 线程优先级默认值为5; setPriority():设置线程优先级 1 - 10 ; ``` >### Thread - 方法: ``` sleep(int time) : 线程多少秒执行一次. currentThread():获得当前线程 ``` >### 线程安全 当多个线程操作共享属性的时候,此时有可能产生线程安全问题。 - 线程机制 每一个线程都有自己的线程栈,当需要栈操作共享数据时,线程栈会拷贝一份堆中的副本,在栈中操作完副本之后,再将这个新值,同步给堆。 >解决方案 同步代码块,又叫对象锁。 - 语法格式 ``` synchronized(任意一个对象,都可以当锁){ 包裹课程产生线程安全的代码 } ``` - 注意 ``` 使用同步代码块的时候,对于锁对象的要求,要求多个线程要使用同一个对象。 ``` >### 线程池 *线程池,是一个容纳多个线程的容器。* - 线程池的创建 ``` Executors.newFixedThreadPool(线程数); ``` - 向线程池提交执行任务 ``` submit() : ``` ``` 实现Runnable接口 实现Callable接口 ``` - 关闭线程池 ``` shutdown() ``` >### 同步方法 *使用synchronized修饰方法。* ``` 1.非静态方法锁对象默认为this; 2.静态方法锁对象默认为当前字节码文件,类名.class ``` >### 线程状态 * 新建状态 * 可运行状态 * 阻塞/等待状态 * 运行状态 * 死亡状态