多线程的复习整理

本文详细介绍了Java多线程的基础概念和技术实现,包括进程与线程的区别、Thread类与Runnable接口的应用场景、synchronized关键字与Lock接口的使用方法,以及线程的状态管理和常见操作。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

线程和进程,Thread和Runnable,Lock和synchronized,线程状态,线程分类等


线程和进程:

进程:就是一个正在执行中的程序。每个进程都有一个执行顺序,叫一个执行路径,或一个控制单元。
线程:就是进程中的一个独立的控制单元,线程在控制着进程的执行。一个进程中至少有一个线程。


Thread和Runnable

Thread实现:

1,继承Thread类。2,复写run()方法。3,调用Thread.start(),(启动线程,调用run方法)。

Runnable实现:

1,实现Runnable接口。2,复写run()方法。3,通过Thread类建立线程对象
4,将Runnable接口的子类对象作为实际参数传递给Thread类的构造函数(因为自定义的run方法所属的对象是Runnable接口的子类对象,所以要让线程去执行指定对象的run方法,必须要明确该run方法所属的对象)
5,调用Thread类的start方法开启线程并调用Runnable接口子类的run方法

继承Thread类,只能单继承,限定了类的体系,固定了线程的数据,只能执行指定的线程数据。相当于多种线程完成各自的任务。

实现Runnable接口,拥有扩展性,避免了单继承的局限性,适用于共享数据。相当于多个线程完成一个共同任务。

Lock和synchronized

多线程中,操作共享数据时,由于阻塞状态,多条语句操作同一个线程共享数据时,可能一个线程正在执行时产生阻塞,另一个线程也参与执行。导致出现安全隐患。

同步代码块,同步函数,同步类

synchronized(object){

同步代码块

}

同步函数

synchronized  void run(){

}

同步代码块synchronized(object锁定)

同步函数synchronized(this所属对象锁定)

同步静态函数synchronized(类名.class锁定)


1.5出现 Lock接口,Condition接口

通过Lock,Condition分别实现了锁和线程状态的方便灵活的使用。


Lock接口替代了synchronized方法和语句的使用

new ReentrantLock();Lock实例

lock();获取锁

unlock();释放锁

newCondition();得到Conditon()实例

Condition接口替代了Object监视器方法的使用。一个Lock可以有多个Condition()实例。方便实现不同的操作数据。

await();等待

signal();唤醒

signalAll();唤醒


线程状态:

创建 

start() 运行 

sleep(time)时间到会自动运行;wait()等待notify()唤醒
冻结(睡眠和等待两种)
消亡stop();或run方法结束。

特殊状态:临时状态,阻塞 有运行资格CPU没有给执行权。冻结没有运行资格,结束冻结会先回到临时状态。




常用方法:

getName()线程名称

setName(),new Thread(name);设置线程名

Thread.currentThread()得到线程当前所属对象(static)

setDaemon(boolean on);线程标记为守护线程,必须在线程启动前调用,相当于后台线程。只有守护线程时,Java虚拟机退出。

join();等待ioin线程中止 

yiele();临时释放当前正在执行的线程对象,执行其他线程static

setPriority(int);更改线程优先级(1-10,默认5,1-5-10:MIN-NORM-MAX);

wait();等待

notify();唤醒

notifyAll();基于同步锁的方法。调用时指定线程所属的锁。


线程停止:

stop();强行停止,不安全。

suspend();会发生死锁。

run()方法结束,线程结束。控制run()方法结束;线程冻结时,interrupt();清除线程冻结状态,并会收到InterruptedExcption;


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值