`
747017186
  • 浏览: 317454 次
社区版块
存档分类
最新评论

condition线程之间的通信

 
阅读更多

Condition是java提供线程之间的一个通信机制,替换掉了Object当中的wait、notifly方法,相对于来说比较简单。

package thread;

import java.util.concurrent.locks.Condition;
import java.util.concurrent.locks.Lock;
import java.util.concurrent.locks.ReentrantLock;

public class ConditionTest {
	public static void main(String[] args) {
		final ThreadTask threadTask = new ThreadTask();//业务任务对象
		new Thread(new Runnable() {
			@Override
			public void run() {
				for(int i=0;i<50;i++){
					threadTask.loopTask();//子线程任务
				}
			}
		}).start();
		for(int i=0;i<50;i++){
			threadTask.mainTask();//主线程任务
		}
	}
}

class ThreadTask{
	private boolean flag = true;//主线程、子线程运行标志
	Lock lock = new ReentrantLock();//锁对象
	Condition condition = lock.newCondition();//线程通信对象,必须在锁上实例化对象
	public void loopTask() {
		lock.lock();
		try {
			while(!flag){//防止线程虚假唤醒
				try {
					condition.await();//线程等待
				} catch (InterruptedException e) {
					// TODO Auto-generated catch block
					e.printStackTrace();
				}
			}
			for(int i=1;i<=100;i++) {
				System.out.println("子线程执行:"+i);
			}
			flag = false;
			condition.signal();//唤醒线程
		} finally {
			lock.unlock();
		}
	}
	public void mainTask() {
		lock.lock();
		try {
			while(flag){
				try {
					condition.await();
				} catch (InterruptedException e) {
					// TODO Auto-generated catch block
					e.printStackTrace();
				}
			}
			for(int i=1;i<=50;i++) {
				System.out.println("主线程执行:"+i);
			}
			flag = true;
			condition.signal();
		} finally {
			lock.unlock();
		}
	}
}

 

分享到:
评论

相关推荐

    线程通信(Condition) 实例

    线程通信(Condition)实例,完整的代码文件,你只需要编译运行即可,就可以看看结果,然后分析。

    Java使用Condition控制线程通信的方法实例详解

    主要介绍了Java使用Condition控制线程通信的方法,结合实例形式分析了使用Condition类同步检测控制线程通信的相关操作技巧,需要的朋友可以参考下

    Java编程中实现Condition控制线程通信

    主要介绍了Java编程中实现Condition控制线程通信,简单介绍了Java中控制线程通信的方法,以及对condition的解析和实例,具有一定参考价值,需要的朋友可以了解下。

    Java线程间的通信----生产者消费者模型

    利用线程间的通信主要是因为当多个线程同时对一个对象进行访问的时候,多个线程之间是一个协助的关系,举个例子就是今天要说的生产这和消费者模型。

    Python多线程编程(八):使用Event实现线程间通信

    使用threading.Event可以实现线程间相互通信,之前的Python:使用threading模块实现多线程编程七[使用Condition实现复杂同步]我们已经初步实现了线程间通信的基本功能,但是更为通用的一种做法是使用threading.Event...

    java中的Lock类和Condition类.docx

    在jdk1.5以后,JAVA提供了Lock类来实现和synchronized一样的功能,并且还提供了Condition来显示线程间通信。 Lock类是Java类来提供的功能,丰富的api使得Lock类的同步功能比synchronized的同步更强大。本文章的所有...

    Python线程协作threading.Condition实现过程解析

    主要介绍了Python线程协作threading.Condition实现过程解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下

    Python快速而美丽[v1.0.0][线程通信]

    使用Condition实现线程通信 使用Condition可以让那些已经得到Lock对象却无法继续执行的线程释放Lock对象,Condition对象也可以唤醒其他处于等待状态的线程 将Condition和Lock对象组合使用,可以为每个对象提供多个...

    Java学习源码Java多线程的代码

    在char03包里放置了Java线程间通信的知识的代码。内容如下: 等待/通知机制 join方法的使用 在char04包里放置了Java中Lock类的知识的代码,内容如下: Lock类 Lock类其他功能 Condition类 Condition类其他...

    基础技术部牛路《Java多线程入阶分享》纯干货

    4.线程间通信:lock、condition、wait、notify、notifyAll 5.Lock-free:atomic、concurrentMap.putIfAbsent、CopyOnWriteArrayList 6.关于锁的经验介绍 7.并发流程控制手段:CountDownLatch、Barrier 8.定时器:...

    Java线程指南

    Java线程指南 线程安全与不安全 线程同步synchronized和volatile 线程协作-生产者/消费者模式 Timer和TimerTask 线程池 Callable和Future 锁对象Lock-同步问题更完美的处理方式 Condition-线程通信更高效的方式

    尚硅谷Java视频_JUC 视频教程

    尚硅谷_JUC线程高级_Condition 线程通信 ·10. 尚硅谷_JUC线程高级_线程按序交替 ·11. 尚硅谷_JUC线程高级_ReadWriteLock 读写锁 ·12. 尚硅谷_JUC线程高级_线程八锁 ·13. 尚硅谷_JUC线程高级_线程池 ·14. ...

    python线程中同步锁详解

    以及线程之间的同步,或者访问共享变量等问题是十分棘手的问题,也是使用多线程下面临的问题,如果处理不好,会带来较严重的后果,使用python多线程中提供Lock Rlock Semaphore Event Condition 用来保证线程之间的...

    基于Boost的数据处理器及线程安全类和信号量

    将线程通信间比较难的线程安全、信号通知等机制均封装在对象中 // 3. 由于数据的传递完全依靠事件通知,因此数据的流转效率以及吞吐量均非常高(已经使用在公司海外股票FeedHandler上,吞吐量轻松突破每秒500,000个...

    Java并发编程基础.pdf

    了解线程间的通信方式,如共享内存、消息传递等。 并发集合:熟悉Java提供的并发集合类,如ConcurrentHashMap、CopyOnWriteArrayList等,这些集合类在并发环境下提供了线程安全的操作。 线程池:了解Java中的...

    Java中的Runnable接口最全讲义

    7. 线程通信: 7.1 使用wait()和notify()方法 7.2 使用Lock和Condition 8. 线程池: 8.1 线程池的概述 8.2 使用Executor框架创建线程池 8.3 线程池的优势和适用场景 9. 线程中断: 9.1 如何中断线程 9.2 处理中断...

    这就是标题—— JUC.pdf

    Condition 定制化通信 多线程锁 并发下的集合类 List Set Map Callable接口 线程创建的方式 callable / runnable FutureTask JUC常用辅助类 CountDownLatch (减少计数器) CyclicBarrier(加法计数器) Semaphore...

    Java并发编程原理与实战

    线程之间通信之join应用与实现原理剖析.mp4 ThreadLocal 使用及实现原理.mp4 并发工具类CountDownLatch详解.mp4 并发工具类CyclicBarrier 详解.mp4 并发工具类Semaphore详解.mp4 并发工具类Exchanger详解.mp4 ...

    Linux多线程服务端编程:使用muduo C++网络库

    3.4进程间通信只用TCP . . . . . . . . . . . . . . .. . . . . . . . . . . . . . 65 3.5多线程服务器的适用场合. . . . . . . . . . . . . . . . .. . . . . . . . . . 67 3.5.1必须用单线程的场合. . . . . . . ....

    高级开发并发面试题和答案.pdf

    线程之间的通信方式; 描述一下notify和notifyAll区别; synchronized关键字加在静态方法和实例方法的区别; 用锁的注意点; cas机制可能导致的问题ABA,什么是ABA; 程序开多少线程合适; 实现一下DCL(双重检查锁...

Global site tag (gtag.js) - Google Analytics