1.多线程的一些概念
进程:是正在运行的程序 是系统进行资源分配和调用的独立单位 每一个进程都有它自己的内存空间和系统资源。
线程:是进程中的单个顺序控制流,是一条执行路径。
单线程:一个进程如果只有一条执行路径,则称为单线程程序。
多线程:一个进程如果有多条执行路径,则称为多线程程序。
并行:多个任务同一时刻进行。
并发:多个任务同一时间间隔内进行,在一段时间内能够执行多个任务,但是这其中的某个时刻只能执行一个任务。
2.多线程的创建和启用
多线程的创建方式:继承和实现。
1.继承 Thread 类,覆写 run 方法。
2.实现 Runnable 接口,覆写 run 方法。
创建线程对象时线程对象是 Thread 类或其子类,可以使用多态。
启动线程需要调用线程对象的 start 方法,而不是直接使用 run 方法。直接调用 run 方法时,只是调用 run 方法,并没有启动线程。
3.多线程的优先级和命名
优先级设置需要放在线程启动之前。优先级用 1~10 来表示,数字越大,优先级越高。
优先级在资源紧张的时候才能体现出来。
相同优先级可使用 yield 方法来让出 CPU 的执行权,但是要用在一个线程拥有时间片但是另一个相同优先级的线程没有拿到时间片的情况下。
Thread.currentThread(); 获取当前线程对象,可以用来获取 main 中的主线程等。
主线程名为 main, 其他线程名为 Thread-1,Thread-2,… 以此类推。
4.多线程的生命周期
生命周期:
阻塞状态结束后回到就绪状态,重新排队。
stop 可能会导致死锁,一般使用标识符终止线程,比如用成员变量 flag 控制何时需要结束进程。
5.多线程的合并
可以使用 join 方法实现线程合并,调用 join 方法的对象先执行线程,在哪个线程里有对象调用 join, 那么这个线程就要等到调用 join 的线程执行结束才可以继续执行。
6.Synchronized
synchronized 使用范围:成员方法,静态方法,语句块。
当某个线程访问某个对象中加了 synchronized 修饰的成员方法时,该对象中所有被 synchronized 修饰的成员方法都被锁定。静态方法同理。
给静态方法加锁是类锁,给成员方法加锁是对象锁。静态锁只影响静态,成员锁影响成员。对象之间互不影响。
可以使用 synchronized 语句块,只锁住部分代码,不用将整个方法都锁住。
7.Lock
为了更清晰的表达如何加锁和释放锁,JDK5 以后提供了一个新的锁对象 Lock 。
Lock 可以获得更广泛的锁定操作。
void lock():获得锁。
void unlock():释放锁。
Lock是接口,可以采用实现类ReentrantLock等实例化。
类 ReentrantLock 有一个无参构造方法:Lock lock = new ReentrantLock();。
8.生产者-消费者(10-26补充)
如果对您有帮助,请点赞关注支持我,谢谢!❤
如有错误或者不足之处,敬请指正!❤