[多线程编程]多线程同步之Object、AtomicBoolean

本文介绍如何利用Java中的Object类及其wait(), notifyAll()方法来实现多线程间的同步操作,通过实例演示了如何在需要阻塞的地方调用wait()方法,在需要唤醒其他线程时调用notifyAll()方法。

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

之前的一篇文章《异步转同步之CountDownLatch,介绍了用JAVA提供的CountDownLatch类来解决多线程同步的问题。这篇文章介绍用Object来解决同样问题


Object类是java的基类,所有的类都继承于Object。查找Object的API,我们会发现在Object类里面已经实现了多线程编程时需要的wait(), notifyAll()等方法


在代码中使用的两个步骤

1. 在需要阻塞的地方调用wait。如:在线程中需要等待另一个线程完成

		synchronized(lock){
			try {
				lock.wait();
			} catch (InterruptedException e) {
				e.printStackTrace();
			}
		}
	}

2. 需要唤醒其他线程时调用notifyAll。如:在运行此线程之前,我已经调用过了wait,当我完成了要做的事情之后,调用notifyAll来唤醒被阻塞的线程

synchronized(lock){
					lock.notifyAll();
				}


另外Object和AtomicBoolean配合使用,可以更好的控制线程

synchronized (stateLock) {
			if (mIsRunning.get()) {
				try {
					stateLock.wait(DEFAULT_WAITTIME);
				} catch (InterruptedException e) {
					// TODO Auto-generated catch block
					e.printStackTrace();
				}
				if(mIsRunning.get())
					return false;
			}
			mIsRunning.set(true);
			mIsInterrupted.set(false);
		}
这里的mIsRunnint、mIsInterrupted就是AtomicBoolean了

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值