`

子线程先执行和主线程交替执行

    博客分类:
  • java
阅读更多
package thread.tongbu;
/**
 * 如题:
 * 子线程先执行10次,然后主线程执行100次
 * 然后子线程再执行10次,主线程再执行100次
 * 如此往复20次
 *
 */
public class Test {

	public static void main(String[] args) throws InterruptedException {
		
		final Bus bus=new Bus();
		
		new Thread(new Runnable() {

			@Override
			public void run() {
				for(int j=0;j<20;j ++){
					try {
						bus.sub(j);
					} catch (InterruptedException e) {
						// TODO Auto-generated catch block
						e.printStackTrace();
					}
				}
			}
		}).start();

		

		for(int j=0;j<20;j++){
			bus.main(j);
		}

	}
}



package thread.tongbu;

package thread.tongbu;

public class Bus {
	
	private boolean shouldGoSub=true;//是否应该走子线程
	
	public synchronized void sub(int j) throws InterruptedException{
		if(!shouldGoSub){
			this.wait();//使当前线程等待,调用wait的对象与synchronized中的对象必须是一个,否则异常
		}
		for (int i = 1; i <= 10; i++) {
			System.out.println("子线程:"
					+ Thread.currentThread().getName() + "循环了:" + i
					+ "次");
		}
		shouldGoSub=false;
		this.notify();//唤醒其他等待的线程
	}
	
	public synchronized void main(int j) throws InterruptedException{
		if(shouldGoSub){
			this.wait();//使当前线程等待,调用wait的对象与synchronized中的对象必须是一个,否则异常
		}
		for (int i = 1; i <= 100; i++) {
			System.out.println("主线程:" + Thread.currentThread().getName()
					+ "循环了:" + i + "次");
		}
		shouldGoSub=true;
		this.notify();//唤醒其他等待的线程
	}
}

分享到:
评论

相关推荐

    子线程更新主线程数据

    - C#中的Task和async/await:异步编程模型,通过async方法和await关键字可以方便地在子线程执行任务,然后在主线程继续执行后续代码。 在实际应用中,选择合适的方法取决于具体平台、性能需求和代码复杂度。确保...

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

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

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

    - **std::future** 和 **std::promise**:提供异步操作的结果,子线程通过promise设置结果,主线程通过future获取。 4. **设计模式**: - **生产者-消费者模型**:子线程作为生产者,将数据放入队列,主线程作为...

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

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

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

    在 Java 中,我们可以使用 Callable 或 Runnable 接口来实现子线程的创建和执行。 其中,Callable 接口的 call 方法可以抛出异常,而 Runnable 接口的 run 方法不能抛出异常。因此,如果我们想捕获子线程的执行结果...

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

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

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

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

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

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

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

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

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

    然而,当涉及到用户界面(UI)更新时,线程间通信(特别是从子线程到主线程)变得至关重要,因为Windows Forms和WPF等UI框架通常不是线程安全的。本实例将探讨如何在C#.NET中从子线程安全地更新主线程数据。 在...

    子线程操作主线程的示例

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

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

    主线程通常负责处理UI事件和显示数据,而子线程则用于执行耗时任务。在Winform应用中,我们可以创建一个新的后台线程(子线程)来执行数据获取任务,同时确保主线程保持响应,更新UI。以下是一般的步骤: 1. **定义...

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

    理解并熟练运用Handler、Looper和Message机制对于进行高效的Android应用开发至关重要,它能帮助开发者避免在主线程中执行耗时操作导致的ANR(Application Not Responding)错误,提升用户体验。同时,这也是一种线程...

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

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

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

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

    QT子线程更新主线程

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

    C++ thread退出线程 多线程 子线程控制退出主线程 window VS2017 Debug Error! Abort() has been called

    C++ thread退出线程 多线程 子线程控制退出主线程 window VS2017 Debug Error! Abort() has been called. C++ thread退出线程 多线程 子线程控制退出主线程 window VS2017 Debug Error! Abort() has been called.

    子线程和主线程通过handler 双向通信

    1. **主线程向子线程发送消息**:在主线程中创建一个HandlerThread,启动它,然后创建一个关联此HandlerThread Looper的Handler。主线程可以通过这个Handler发送Message到子线程。 2. **子线程向主线程发送消息**:...

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

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

    android主线程、子线程及线程间通信方式测试app

    5. **实践测试**:"android主线程、子线程及线程间通信方式测试app"可能包含了各种示例,帮助开发者了解和实践这些概念。通过实际操作,开发者能更好地理解不同线程的使用场景,以及如何有效地进行线程间通信。 总...

Global site tag (gtag.js) - Google Analytics