多线程同步控制和通信

synchronized修饰符用于实现Java中的多线程同步,防止并发访问临界资源导致错误。它有两种用法:同步语句块和同步方法。线程通信则通过wait(),notify()和notifyAll()方法实现,允许线程在特定条件下等待并唤醒其他线程,确保资源的有序访问。
摘要由CSDN通过智能技术生成

多线程同步控制和通信

synchronized修饰符

synchronized修饰符:同步修饰符,在多线程程序中,该修饰符用于对同步资源加锁(即互斥锁),以防止其他线程访问,运行结束后解锁。

为什么要加互斥锁:在不使用互斥锁的情况下,多个线程对一个资源进行读写时容易发生错误。Java通过使用synchronized修饰符来实现临界资源互斥,保证临界代码对临界资源的访问成为一个原子操作,实现同步控制。

synchronized修饰符的两种用法:

同步语句:

synchronized(对象){//含义是判断对象的互斥锁在不在,在就获取并执行临界代码,否则等待
临界代码段
}

同步方法:

public synchronized 返回类型 方法名(){
方法体
/*
这种用法书上说是判断方法的互斥锁是否存在
但实际上是判断调用该方法的对象的互斥锁是否存在
(可以在一个类里实现两个互斥方法验证,当一个互斥方法被一个线程调用时
另一个方法无法被其他线程调用)
本质上和上一种用法是一样的,于是也有下面的等效写法。
*/
}
等效于:
public 返回类型 方法名(){
	synchronizedthis{//由于static方法不能使用this,所以只能采用上面的等效格式
	方法体
	}
}

线程通信

通过wait()方法可以在临界代码中主动释放对象的互斥锁,直到拥有该对象互斥锁的同步代码调用notify()或notifyall()方法唤醒之前调用wait的代码段(唤醒后还需要等待互斥锁),该代码段才能继续执行wait()后面的代码(要是一直没有被唤醒就会卡在那里)。通过这样的方式java实现了线程通信。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值