`

Java回调方法的执行线程

阅读更多
最近在做Android的过程中,在UI线程中启动子线程,并通过传参方式执行回调方法,不清楚回调方法的执行线程是谁。猜想是子线程执行回调方法,但是发现GPS服务的onLocationChanged方法执行进程是UI线程(估计是GPS的service是绑定在UI线程上执行造成的),所以特意做了下测试。直接上代码:

public class Test {

	public static void main(String[] args) {
		System.out.println("111111111");
		Thread c = Thread.currentThread();
		System.out.println(c.getName() + "=" + c.getId() + "=" + c.hashCode());
		System.out.println("111111111");

		final Thread thread = new Thread(new Networker(new CallBackListener() {

			@Override
			public void onCall() {
				// TODO Auto-generated method stub
				System.out.println("3333333");
				Thread c = Thread.currentThread();
				System.out.println(c.getName() + "=" + c.getId() + "="
						+ c.hashCode());
				System.out.println("3333333");
			}
		}));

		Thread thread2 = new Thread() {

			@Override
			public void run() {
				// TODO Auto-generated method stub
				super.run();
				System.out.println("55555");
				Thread c = Thread.currentThread();
				System.out.println(c.getName() + "=" + c.getId() + "="
						+ c.hashCode());
				System.out.println("55555");

				System.out.println("2222");
				thread.start();
				System.out.println("2222");
			}

		};

		System.out.println("000000");
		thread2.start();
		System.out.println("000000");
	}

}

class Networker implements Runnable {

	CallBackListener listener;

	public Networker(CallBackListener listener) {
		super();
		this.listener = listener;
	}

	@Override
	public void run() {
		// TODO Auto-generated method stub
		System.out.println("4444");
		Thread c = Thread.currentThread();
		System.out.println(c.getName() + "=" + c.getId() + "=" + c.hashCode());
		System.out.println("4444");

		System.out.println("xxxxxxxxxx");
		listener.onCall();
		System.out.println("xxxxxxxxxx");
	}

}

public interface CallBackListener {
	public void onCall();
}



再看看执行结果:





证明回调方法是在调用该方法的线程中执行的。
  • 大小: 9.3 KB
分享到:
评论

相关推荐

    C++JNI多线程回调java

    在多线程环境中,每个线程都有自己的执行上下文,这意味着当C++线程回调Java方法时,必须确保Java的同步机制正确地应用,以避免数据竞争和其他并发问题。Java中的`synchronized`关键字和`java.util.concurrent`包下...

    Android JNI多线程编程回调JAVA函数

    本话题将深入探讨如何在Android中使用JNI进行多线程编程,并实现native方法对Java函数的回调。 1. **JNI基础知识**: - JNI是Java平台的一部分,为Java应用程序提供了与本地代码交互的能力。开发者可以通过JNI在...

    JNI层创建的线程中回调java方法

    当我们需要在JNI层创建线程并从这些线程回调Java方法时,就需要对JNI的线程管理和Java方法调用有深入理解。 首先,我们需要了解Java线程和本地线程(即C/C++线程)的区别。Java线程是基于JVM(Java虚拟机)的,而...

    Java中回调方法使用范例

    在Java编程中,回调方法是一种设计模式,它允许我们在代码执行过程中插入自定义的行为,特别是在异步编程或者事件处理中非常常见。...进一步研究这些文件将有助于加深对Java回调方法的理解和实践。

    如何用Java回调和线程实现异步调用.pdf

    "如何用Java回调和线程实现异步调用" 在软件开发中,异步调用是一种非阻塞式调用方式,用于在处理比较耗时的任务时保证程序的连续性和实时性。实现异步调用的关键在于解决三个技术难题:程序阻塞问题、异步消息的...

    轻松学会JNI层多线程回调java方法

    多线程回调Java方法在JNI层实现,能够帮助我们优化程序执行效率,特别是在处理耗时操作如图像处理、音频视频解码等场景。 本文将深入探讨如何在JNI层实现多线程回调Java方法,以及如何解决在C/C++层多线程环境下...

    JNI层中创建的线程中回调java方法代码

    当我们需要在C/C++代码中执行Java方法或者在非Java线程中回调Java方法时,JNI就显得尤为重要。本教程将深入探讨如何在JNI层中创建线程并回调Java方法。 首先,我们需要理解JNI的基本概念。JNI是Java平台标准版的一...

    C回调java几种方法

    为了实现更灵活的回调,可以在Java中定义一个接口,让C代码通过实现该接口的本地方法来触发Java回调。在C代码中,可以创建一个Java对象并设置其为接口的实现,然后通过Java对象调用接口方法。 5. **线程本地存储...

    java回调和线程轮询的区别

    2. **资源消耗**:回调通常比线程轮询更节省资源,因为它只在有事件时才执行。而轮询则可能一直占用资源。 3. **复杂性**:回调可能导致代码深度嵌套,不易阅读和管理,而线程轮询的代码结构相对简单,但可能需要...

    Java多线程--等待所有子线程执行完的五种方法.docx

    // 在所有线程到达屏障后执行的回调动作 }); // 启动子线程并使用barrier for (int i = 0; i ; i++) { new Thread(() -> { // 执行任务 barrier.await(); }).start(); } ``` ### 方法五:使用`ExecutorService...

    java接口回调

    当我们谈论“Java接口回调”时,核心思想是:一个类通过实现特定接口,将自身的某个方法暴露给其他对象调用,当特定事件发生或任务完成时,调用这个暴露的方法进行后续处理。 接口回调在Java中的应用广泛,例如在...

    关于Java线程间通信-回调.docx

    在Java中,线程间通信主要通过多种机制实现,其中包括回调(Callback)。回调是一种设计模式,允许一个线程在完成特定任务后通知另一个线程,而无需直接耦合这两个线程。 在上述文档中,回调被用于解决多线程计算...

    Java回调机制

    Java回调机制是编程中一种非常重要的设计模式,它在异步编程、事件驱动编程和通信中扮演着核心角色。在Java中,回调机制允许一个对象(通常被称为回调对象)向另一个对象注册自身的方法,以便在特定事件发生时,被...

    线程回调demo

    线程回调是多线程编程中的一种通信方式,当某个线程执行完毕或者达到特定条件时,它会调用事先约定好的方法,通知另一个线程进行后续处理。这种机制可以用来传递数据、更新UI或者其他必要的操作。 2. **线程回调的...

    Java中的回调使用

    在Java编程中,回调是一种设计模式,用于在特定事件发生时通知对象或执行代码。这种模式常见于异步编程和事件驱动系统中。回调的概念基于一个简单的思想:当某个操作完成或者达到某个条件时,一个函数(回调函数)会...

    java和android中的回调

    这些类提供了回调方法,如`onPreExecute()`(任务开始前),`doInBackground()`(后台执行任务),`onProgressUpdate()`(更新进度),以及`onPostExecute()`(任务完成后)。这样可以确保UI线程不会因耗时操作而被...

    如何在android的jni线程中实现回调

    当你需要在JNI线程中执行回调时,调用之前创建的本地回调函数,并传入保存的Java方法ID。 4. **使用JNIEnv进行跨线程调用**: 由于JNI环境 (`JNIEnv* env`) 是与线程绑定的,所以不能直接在JNI线程中使用Java方法...

    Android NDK开发——C回调Java中的方法

    当C代码执行完毕并调用`onCallback`时,Java代码会接收到回调。 以上就是实现C回调Java方法的基本流程。在实际开发中,可能还需要处理多线程同步、异常处理等问题。同时,NDK开发也需要注意内存管理,因为C/C++代码...

    Java简单的回调(interface)demo

    在Java编程中,回调是一种设计模式,用于在特定事件发生时通知对象或执行特定操作。回调函数的概念源自函数式编程,但在面向对象编程中也得到了广泛的应用。在Java中,通常通过接口来实现回调机制,这正是“Java简单...

    Java基础核心理解+什么是回调即回调机制讲解

    - **多线程编程**:在多线程环境中,线程间通信可以通过回调来实现。 - **框架开发**:许多框架提供扩展点,允许开发者通过回调机制自定义行为。 #### 四、回调与异步的区别 虽然回调通常与异步调用一起出现,但...

Global site tag (gtag.js) - Google Analytics