Android 多线程加锁

本文介绍了如何在Android中使用ReentrantLock进行多线程同步,确保在读取数据时不会出现不完整的情况。通过在读取和更新数据时加锁,保证了数据的完整性。在onProcessYuvData方法中,获取锁后设置帧数据,然后释放锁。而在startThreads线程中,获取锁来读取并更新帧数据,只有在数据完整时才进行OpenGL渲染。

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

两个线程同一把锁,防止读取得数据不完整  取得时候加锁 确保数据取完,读的时候使用通一把锁确保数据读完



private Lock lock = new ReentrantLock();

// 软解  本地回调方法 
// @{link startThreads()}
public void onProcessYuvData(final byte[] data, final int width,
final int height) {
lock.lock();
mFrame.height = height;
mFrame.width = width;
mFrame.pix = data;
lock.unlock();


}


/**
* OpenGL渲染画面

*/
private void startThreads() {
Thread thread = new Thread() {
public void run() {
glRenderer.update(mFrame.width, mFrame.height);
FrameBean frameBean = new FrameBean();
while (isplay) {
lock.lock();
frameBean.width = mFrame.width;
frameBean.height = mFrame.height;
frameBean.pix = mFrame.pix;
lock.unlock();
if (frameBean.width != 0 || frameBean.height != 0) {
if (frameBean.pix != null && frameBean.width != 0
&& frameBean.height != 0) {
glRenderer.update(frameBean.pix, frameBean.width,
frameBean.height);
}
}


}
}
};
// LoadingDialog.showLoadingDlg(SDLActivity.this, false, "");
thread.start();


}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值