线程之间的同步通信

我们都知道在java中线程的代码形式可以写为如下

new Thread(
				new Runnable() {

					@Override
					public void run() {
						// TODO Auto-generated method stub

					}
				}
				).start();

在多线程启动之下,线程之间的运行将是随机进行切换的,通常有的时候,我们在业务需求上可能需要线程之间有序的进行切换执行,确保业务的准切性,比如银行的取票机,还有火车的售票等,在此等业务的情况下,我们要想控制线程之间的通信,需要通过同步锁来实现

比如我希望线程a执行5此后,线程b执行10次,或者反过来,如此50次。

下面我们来看代码

class Business{

	 private boolean bShouldSub = true;

	 public synchronized void sub(int i){

		 while (!bShouldSub) {
			 try {
				this.wait();
			} catch (InterruptedException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}

		}

		 for(int  j=0;j<=i;j++){
				System.out.println("sub thread------------------------------------------------------------"+j);
			}

		 bShouldSub = false;
		 this.notify();
	 }

	 public synchronized void main(int i){

		 while (bShouldSub) {
			try {
				this.wait();
			} catch (InterruptedException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}

		}
			for (int j = 0; j <= i; j++) {
				System.out.println("main thread sequence of   " + j
						+ "   i=" + i);
			}

			bShouldSub = true;
			this.notify();
	 }

 }

把相称要执行的业务单独抽取成一个类,确保锁的唯一性。

private boolean bShouldSub = true;是为了 线程之间进行通信。

下面我们来看线程的执行代码

		final Business business = new Business();

			new Thread(
					new Runnable() {

						@Override
						public void run() {
							for(int i=0;i<=50;i++){
									business.sub(5);
							}

						}
					}
					).start();

		for (int i = 0; i <= 50; i++) {

				business.main(10);
		}

	}

至此想必对初学者来说对线程的通信机制的了解会更进一步

时间: 2024-10-03 03:08:08

线程之间的同步通信的相关文章

线程之间的通信

1.1.线程之间的通信方法 多个线程在处理统一资源,但是任务却不同,这时候就需要线程间通信.    等待/唤醒机制涉及的方法:    1. wait():让线程处于冻结状态,被wait的线程会被存储到线程池中.    2. notify():唤醒线程池中的一个线程(任何一个都有可能).    3. notifyAll():唤醒线程池中的所有线程.  备注    1.这些方法都必须定义在同步中,因为这些方法是用于操作线程状态的方法.    2.必须要明确到底操作的是哪个锁上的线程!    3.wa

Android线程之间的通讯

Android之中,只有主线程当中能修改UI 的值,WorkThread中不能修改.因此在WorkThrean中运行比较耗时的程序,即在WorkThread中获取数据,然后将数据发送的主线程,再修改UI. 根据以上的思路来理解Android中个线程之间的通讯. 1.新建个TestHandler类,继承至Handler, 1)复写handlerMessage方法,来实现获取消息队列中的信息: //新建handler对象 Handler handler = new TestHandler(); //

漫谈并发编程(五):线程之间的协作

编写多线程程序需要进行线程协作,前面介绍的利用互斥来防止线程竞速是来解决线程协作的衍生危害的.编写线程协作程序的关键是解决线程之间的协调问题,在这些任务中,某些可以并行执行,但是某些步骤需要所有的任务都结束之后才能开动. wait()与notifyAll() wait()使你可以等待某个条件发生变化,wait()会在等待外部世界产生变化的时候将任务挂起,并且只有在notify()或notifyAll()发生时,即表示发生了某些感兴趣的事物,这个任务才会被唤醒并去检查所产生的变化. 调用sleep

Java多线程之~~~使用Exchanger在线程之间交换数据

在多线程中,两个线程之间交换数据是非常常见的情况,我们可以使用公共的数据结构,同样,Java也提供了很好 的类供我们使用,那就是Exchanger类,这个类可以帮助我们在两个线程之间同步数据结构,下面我们以这个类再来实 现一遍生产者消费者模型,貌似这个模型已经被写烂了. package com.bird.concursey.charpet5; import java.util.List; import java.util.concurrent.Exchanger; public class Pr

Java如何实现线程之间的互斥

给出一个题目,有3个线程,我希望线程1向控制台输出3行信息后,线程2向控制台输出6行信息,接下来是线程3输出10行信息到控制台,如此循环10次.在一个线程输出信息的时候,其他线程不能产生干扰. package com.concurrent.condition; import java.util.concurrent.locks.Condition; import java.util.concurrent.locks.Lock; import java.util.concurrent.locks.

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

文章来源:[url]http://www.programfan.com/article/showarticle.asp?id=2951[/url] 当前流行的Windows操作系统能同时运行几个程序(独立运行的程序又称之为进程),对于同一个程序,它又可以分成若干个独立的执行流,我们称之为线程,线程提供了多任务处理的能力.用进程和线程的观点来研究软件是当今普遍采用的方法,进程和线程的概念的出现,对提高软件的并行性有着重要的意义.现在的大型应用软件无一不是多线程多任务处理,单线程的软件是不可想象的.

Android 使用handler实现线程间发送消息 (主线程 与 子线程之间)、(子线程 与 子线程之间)

keyword:Android 使用handler实现线程间发送消息 (主线程 与 子线程之间).(子线程 与 子线程之间) 相信大家平时都有使用到异步线程往主线程(UI线程)发送消息的情况. 本文主要研究Handler的消息发送. 包含主线程往子线程发送消息,子线程之间互相发送消息. 一.主线程向子线程发送消息. 实现过程比較简单: 主线程发送消息到异步线程.异步线程接收到消息后在再发送一条消息给主线程. 1. 初始化主线程的Handler,用来接收子线程的消息. 2. 启动异步线程.在异步线

进程与线程之间的区别及联系

一.定义: 1.进程:进程是一个具有独立功能的程序关于某个数据集合的以此运行活动.是系统进行资源分配和调度的独立单位,也是基本的执行单元.是一个动态的概念,是一个活动的实体.它不只是程序的代码,还包括当前的活动. 进程结构特征:由程序.数据和进程控制块三部分组成.具有独立性.并发性.异步性和动态性的特点. (1).进程的概念主要有两点: 第一,进程是一个实体.每一个进程都有它自己的地址空间,一般情况下,包括文本区域(text region)--存储处理器执行的代码,数据区域(data regio

Java多线程之~~~使用Exchanger在线程之间交换数据[这个结合多线程并行会有解决很多问题]

http://blog.csdn.net/a352193394/article/details/39503857 具体看 http://www.cnblogs.com/donaldlee2008/p/5290169.html java 线程池 并行 执行   http://www.cnblogs.com/donaldlee2008/p/5290169.html Java多线程之~~~使用Exchanger在线程之间交换数据 2014-09-23 20:48 1205人阅读 评论(0) 收藏 举报