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

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();
		}
	}
}

 

分享到:
评论

相关推荐

    多线程之间的线程通信

    "多线程之间的线程通信"是确保多个线程协同工作、避免数据不一致性和提高程序效率的关键概念。在本话题中,我们将深入探讨线程通信的原理、方法,以及潜在的危险。 首先,线程通信是指在一个进程中,不同的线程之间...

    线程间通信的定义及全局变量的方法

    首先,线程间通信指的是在同一个进程中的多个线程之间交换信息或数据的过程。由于线程共享同一个进程的内存空间,线程间的通信相对来说比较容易实现。最简单的通信方式就是使用全局变量。全局变量对于进程内的所有...

    线程的几种控制方式以及线程间的几种通信方式

    4. **线程间通信**:线程间通信允许线程之间交换信息,Java提供了多种机制,如`wait()`, `notify()`, `notifyAll()`,Python中则有`Condition`对象。 5. **线程休眠**:Java的`Thread.sleep()`方法可以让线程暂停...

    操作系统中多线程之间通信

    首先,多线程通信(Inter-Thread Communication, ITC)是多线程编程中的关键部分,它涉及到线程间的同步和异步操作。同步是为了确保线程按照预定的顺序执行,防止数据竞争和死锁等问题;异步则允许线程独立执行,...

    创建线程及线程间通信

    线程通信是线程协作完成任务的关键,它允许线程之间交换数据或同步操作。一种常见的通信机制是“生产者-消费者”模型,其中生产者线程生成数据,而消费者线程消费这些数据。在没有适当的同步机制下,可能会出现数据...

    进程线程通信,线程同步,异步,进程通信经典进程间通信.7z

    在计算机科学中,进程线程通信、线程同步与异步以及进程间的通信是操作系统核心概念,对于理解和优化多任务并行处理至关重要。这些概念在软件开发,尤其是并发编程领域中占据着举足轻重的地位。 首先,让我们来探讨...

    Java的多线程-线程间的通信.doc

    线程的状态转换是理解线程通信的基础,主要包括四个状态:新(New)、可执行(Runnable)、死亡(Dead)和停滞(Blocked)。新状态是指线程对象已创建但未启动;可执行状态意味着线程可能在等待CPU资源或正在执行;...

    线程间通信求和逆序源代码

    当一个程序包含多个并发执行的线程时,线程间通信用于协调它们之间的活动,确保数据的一致性和正确性。在这个场景中,"线程间通信求和逆序源代码"显然涉及到在多线程环境中实现数字序列的求和以及结果的逆序输出。 ...

    VC中利用多线程技术实现线程之间的通信

    在实际应用中,线程间的通信是多线程编程中不可或缺的一部分,以确保不同线程间能够协同工作,正确地共享数据和同步操作。本文将深入探讨如何在VC++中利用多线程技术来实现线程间的通信。 首先,创建线程是多线程...

    使用全局对象进行线程间的通信

    线程通信是指不同的线程间交换信息或同步执行的过程,这对于实现并发操作和协调不同任务至关重要。本篇文章将深入探讨如何在VC++ 2008中利用全局变量进行线程间的通信。 首先,我们需要了解全局变量的作用。全局...

    多线程编程之三——线程间通讯

    线程间通信是多线程编程中的核心概念,它允许不同线程之间交换信息和协调工作。当一个程序中存在多个并发执行的线程时,它们可能需要共享数据或者互相通知事件的发生,这就需要线程间通信机制。下面将详细讨论几种...

    多线程技术实现线程之间的通信

    在线程通信中,同步是非常关键的一环,防止数据竞争和死锁的发生。死锁是指两个或多个线程互相等待对方释放资源,导致无法继续执行的情况。为了避免死锁,应遵循一定的设计原则,如避免循环等待,合理分配资源,使用...

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

    使用 Condition 控制线程通信的方法可以提高线程间的协调和通信,提高程序的效率和可靠性。 Condition 的优点: * Condition 可以实现更高级的线程同步机制。 * Condition 可以在多个线程之间实现更好的协调和...

    传智播客_张孝祥_传统线程同步通信技术

    张孝祥老师的课程"传智播客_张孝祥_传统线程同步通信技术"深入浅出地讲解了这一主题,旨在帮助开发者理解和掌握线程间的协作与数据共享方式。 线程同步是指在多线程环境下,控制多个线程按一定的顺序执行,以避免...

    java并发之线程间通信协作.docx

    Java提供了多种线程间通信的机制,其中最常见的两种方式是基于`synchronized`关键字的`Object`类的`wait()`、`notify()`和`notifyAll()`方法,以及使用`ReentrantLock`类的`Condition`接口的`await()`、`signal()`和...

    多线程网络通信演示

    线程的创建、同步和管理是多线程编程的关键部分,需要合理地设计线程间的数据交互和同步机制,如互斥锁(mutexes)、条件变量(condition variables)或信号量(semaphores),以避免竞态条件和死锁。 在提供的...

    线程通信(Condition) 实例

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

    Java 线程通信示例 源代码

    这个"Java线程通信示例源代码"很可能包含了演示如何在不同线程之间共享数据和协调执行顺序的实例。线程通信主要涉及两个核心概念:同步和互斥。 1. **线程同步**:线程同步是为了防止多个线程同时访问共享资源,...

    线程示例(有注释,包括同步,线程间通信)

    ReentrantLock还提供了Condition接口,可以创建多个条件变量,实现更复杂的线程同步和通信。 4. **CountDownLatch**:这是一个计数器类,用于协调多个线程之间的同步。在开始执行前,线程需要等待计数器归零才能...

Global site tag (gtag.js) - Google Analytics