`

子线程先执行10次,主线程执行5次,子线程再执行10次,主线程再执行5次,如此反复3次

 
阅读更多
package com.mhm.test1;


/**
 * 子线程跑10次,主线程跑5次,然后子线程再跑10次,主线程再跑5次,往返3次
 * @author Mahone
 *
 */
public class Test2 {
	
	public static void main(String[] args) {
		Test2 t2 = new Test2();
		t2.init();
	}
	
	private void init() {
		final Business b = new Business();
		
		Thread t = new Thread(new Runnable() {
			@Override
			public void run() {
				for (int i = 0; i <3; i++) {
					b.sub(i);
				}
			}
		});
		t.start();
		for (int i = 0; i <3; i++) {
			b.main(i);
		}
		
	}
	
	
	/**
	 * 业务类
	 * @author Administrator
	 *
	 */
	class Business {
		// 默认subFlag为true,子线程可执行
		private boolean subFlag = true;
		
		public synchronized void sub(int loop) {
			// 如果子线程不可执行,则当前线程等待,CPU给其他线程使用
			if (!subFlag) {
				try {
					this.wait();
				} catch (InterruptedException e) {
					e.printStackTrace();
				}
			}
			
			for (int i = 0; i < 10; i++) {
				System.out.println("loop: " + loop + " sub-" + Thread.currentThread().getName());
			}
			
			// 执行完子线程,子线程flag设为false
			subFlag = false;
			// 通知其他线程开始响应
			this.notify();
		}
			
		
		public synchronized void main (int loop) {
			if (subFlag) {
				try {
					this.wait();
				} catch (InterruptedException e) {
					e.printStackTrace();
				}
			}
			
			for (int i = 0; i < 5; i++) {
				System.out.println("loop: " + loop + " main-" + Thread.currentThread().getName());
			}
		
			subFlag = true;
			this.notify();
		}
	}
	
	
}



 

 

 

分享到:
评论

相关推荐

    C#子线程执行完后通知主线程的方法

    本文将详细介绍如何在C#中实现子线程执行完毕后通知主线程的方法。 首先,我们要理解线程间通信的重要性。在C#中,不同线程之间不能直接共享数据,因此需要借助同步机制来协调它们之间的操作。在这个场景下,我们...

    子线程更新主线程数据

    主线程通常负责用户界面的显示与交互,而子线程则用于执行耗时的任务,避免阻塞主线程,提供良好的用户体验。然而,由于线程之间的数据同步问题,直接在子线程修改主线程的数据可能会导致数据不一致或程序崩溃。本文...

    如何从子线程更新主线程数据

    在多线程编程中,尤其是使用VC++进行开发时,如何有效地从子线程更新主线程的数据是一个重要的问题。这涉及到线程间通信(Thread Communication)的概念,它确保了不同线程之间的协作和数据同步。在Windows环境中,...

    子线程循环10次,接着主线程循环100,接着又回到子线程循环10次,接着再回到主线程又循环100,如此循环50次,请写出程序。

    标题中的内容涉及到多线程编程,具体是一种交替执行的任务模式,即子线程循环10次,然后主线程循环100次,这样的交替过程重复50次。这是一个典型的线程交互场景,常用于实现并发任务,比如在GUI应用中更新界面或者在...

    子线程任务发生异常,主线程事务如何回滚

    子线程任务发生异常,主线程事务如何回滚? 本文将详细探讨当子线程任务发生异常时,如何让主线程捕获到该异常并进行事务的回滚。下面将从多线程编程的基础知识、线程池的使用、异常捕获三个方面进行阐述。 一、多...

    Visual C++源代码 22 如何从子线程更新主线程数据

    Visual C++源代码 22 如何从子线程更新主线程数据Visual C++源代码 22 如何从子线程更新主线程数据Visual C++源代码 22 如何从子线程更新主线程数据Visual C++源代码 22 如何从子线程更新主线程数据Visual C++源代码...

    Qt子线程更新数据发到主线程显示.rar

    这里我们主要讨论如何在Qt子线程中处理数据并将其安全地发送到主线程,以便在QTableWidget中显示。 首先,我们要明白Qt的线程模型。主线程通常负责处理GUI事件,而子线程则可以执行计算密集型任务。在多线程环境中...

    java 子线程通过观察者模式通知主线程

    子线程与主线程之间的通信方式有很多种,如使用共享变量、wait/notify机制、Future和Callable接口等。而观察者模式(Observer Pattern)则是一种设计模式,它允许一个对象的状态变化自动通知其他依赖该对象的对象。...

    C# 主线程显示数据,子线程获取数据

    在Winform应用中,我们可以创建一个新的后台线程(子线程)来执行数据获取任务,同时确保主线程保持响应,更新UI。以下是一般的步骤: 1. **定义异步方法**:首先,你需要定义一个返回`Task`的异步方法,用于执行...

    c#子线程如何读取及设置主线程ui的值

    c#子线程如何读取及设置主线程ui的值,自己录的一个小视频,方便理解,比较菜鸟的方法,请勿喷!

    C#子线程刷新主线程示例源码20121128

    C#子线程刷新主线程示例源码 功能介绍: 使用线程操作 1、实时显示当前时间 2、输入加数和被加数,自动出现结果 技术特点: 使用了多线程实现了子线程刷新主线程 ,使用委托刷新主线程。 注意: 开发环境为...

    子线程和主线程5种交互方式 Demo

    主线程,也称为UI线程,负责处理用户界面的更新和事件响应,而子线程通常用于执行耗时操作,如网络请求、数据处理等,以避免阻塞主线程导致应用无响应。以下是对标题和描述中提到的五种子线程与主线程交互方式的详细...

    子线程操作主线程的示例

    主线程通常负责用户界面的更新和事件处理,而子线程则用于执行耗时的任务,以避免阻塞UI。本示例将深入探讨如何在Java或C#等支持多线程的编程语言中,安全地从子线程操作主线程。 首先,我们需要理解线程同步的概念...

    QT子线程更新主线程

    "QT子线程更新主线程"这个主题涉及到如何在后台线程(子线程)执行耗时操作,并将结果安全地传递到用户界面线程(主线程),以避免阻塞UI,保持其流畅性。 Qt库提供了QThread类来支持多线程编程。子线程通常用于...

    如何从子线程更新主线程数据实例C#.net源代码编写

    子线程则常用于执行长时间运行的任务,以避免阻塞UI。但直接在子线程中修改UI控件可能导致未定义的行为,因为这些控件是由主线程创建和管理的。为了解决这个问题,我们需要使用特定的方法来委托更新给主线程。 首先...

    子线程接收主线程发送的消息

    5. **发送消息**:在主线程中,通过之前创建的主线程Handler使用`sendMessage()`或`post()`方法向子线程的Handler发送Message。 6. **处理消息**:子线程的Handler会在其Looper的消息循环中接收到主线程发送的消息...

    Handler主线程于子线程,子线程与子线程,主线程到子线程消息传递

    Handler消息传递详解,子线程到子线程,主线程到子线程,子线程到主线程 三种消息,Looper,Handler工作机制详解 https://blog.csdn.net/shoneworn/article/details/80447651

    个人开发小工具--Unity主线程和子线程跳转调用

    Unity除了一些基本的数据类型,几乎所有的API都不能在子线程中调用,如果项目中有一段很耗时操作,unity可能会出现“卡死...因此针对这个问题再加上查找了一些资料,弄出了一个小工具,可以子线程与主线程的相互访问。

    Java主线程等待子线程执行完毕

    然而,在某些情况下,我们需要等待所有子线程执行完毕后再继续执行主线程的剩余动作。这时,我们可以使用 Java 提供的 CountDownLatch 类来实现这个功能。 CountDownLatch 是一个同步辅助类,它允许一个或多个线程...

    通过窗口传递让主线程触发FIRE事件(子线程不能触发)

    "通过窗口传递让主线程触发FIRE事件(子线程不能触发)"这个话题聚焦于如何确保事件正确地在主线程中触发,因为某些操作必须在主线程中执行,比如更新UI。下面我们将深入探讨这一主题。 1. **线程安全与事件触发**...

Global site tag (gtag.js) - Google Analytics