线程的创建和使用⚠️
2021-01-28 本文已影响0人
DOB_8199
线程的创建和使用 ⚠️

* 多线程的创建,方式一:继承于Thread类
* 1. 创建一个继承于Thread类的子类
* 2. 重写Thread类的run() --> 将此线程执行的操作声明在run()方法中
* 3. 创建Thread类的子类的对象
* 4. 通过此对象调用start()
start()方法的作用:1. 启动当前线程 2. 调用当前线程的run()
⭕️ 我们不能通过调用run()方法直接启动线程!!
⭕️ 不可以还让已经start()的线程去执行,会报IllegalThreadStateException异常。若想要再 启动一个线程做同样的功能,需要重新创建一个线程的对象去start()。


给线程命名:


说明:高优先级的线程要抢占低优先级线程cpu的执行权。但是只是从概率上讲,高优先级的线程高概率的情况下被执行。并不意味着只有当高优先级的线程执行完以后,低优先级的线程才执行。
创建多线程的方式二:实现Runnable接口
* 1. 创建一个实现了Runnable接口的类
* 2. 实现类去实现Runnable中的抽象方法:run()
* 3. 创建实现类的对象
* 4. 将此对象作为参数传递到Thread类的构造器中,创建Thread类的对象
* 5. 通过Thread类的对象调用start()
比较创建线程的两种方式。
开发中:优先选择:实现Runnable接口的方式
原因:1. 实现的方式没有类的单继承性的局限性
2. 实现的方式更适合来处理多个线程有共享数据的情况。
联系:public class Thread implements Runnable
相同点:两种方式都需要重写run(),将线程要执行的逻辑声明在run()中。

释放锁的操作

不会释放锁的操作
