工作了一年了,一直没怎么多用线程一块,好薄弱,,今天看了看。自己写了个小例子。免的以后忘了。做的主要是线程监控返回值。即不用轮训,和设置变量。让线程通知主类(我做完活东西给你了。)
直接上代码吧。
package com.bjz;
/**
* 实现
* @author bjz
*
*/
public interface CallbackListener {
public void srtartCallbackThread();
public void print(String returnResult); //主要实现方法,为什么不红了???
}
接口只要是供调用线程的类实现。从而实现线程和调用方法的解耦(ps:线程对主类)
package com.bjz;
public class Reciver implements CallbackListener {
private String num;
private int count;
String result;
public Reciver(String num, int count) {
this.num = num;
this.count = count;
}
@Override
public void srtartCallbackThread() {
CallbackAndThread callbackAndThread = new CallbackAndThread(num, count);
callbackAndThread.addList(this);
new Thread(callbackAndThread).start();
}
[color=darkred]@Override
public void print(String returnResult) {
this.result = returnResult;
System.out.println(result);
}[/color] //主要实现方法,为什么不红了???
}
下来就是线程了
package com.bjz;
import java.util.List;
import java.util.ListIterator;
import java.util.Vector;
public class CallbackAndThread implements Runnable {
private String note;
private int count;
private List listenerList = new Vector();
public CallbackAndThread(String note, int count) {
this.note = note;
this.count = count;
}
public void addList(CallbackListener listener) {
listenerList.add(listener);
}
public void removeList(CallbackListener listener) {
listenerList.remove(listener);
}
[color=darkred]
public synchronized void returnResult(String note, int count) {
ListIterator iterator = listenerList.listIterator();
while (iterator.hasNext()) {
CallbackListener listener = (CallbackListener) iterator.next();
StringBuffer sb = new StringBuffer();
for (int i = 0; i < count; i++) {
sb.append(note);
}
listener.print(sb.toString());
}
}[/color] //主要实现方法,为什么不红了???
@Override
public void run() {
returnResult(note, count);
}
}
package com.bjz;
public class Test {
public static void main(String[] args) {
for (int i=0;i<10;i++) {
Reciver reciver = new Reciver(i+"", 50);
reciver.srtartCallbackThread();
}
}
}
测试类
分享到:
相关推荐
本示例聚焦于"C++ JNI多线程回调Java",即在C++中创建多线程,并在这些线程中通过JNI回调Java代码。 首先,我们需要理解JNI的基本概念。JNI是一种接口,它定义了Java虚拟机(JVM)如何与本地代码(如C++)交互。这...
本话题将深入探讨如何在Android中使用JNI进行多线程编程,并实现native方法对Java函数的回调。 1. **JNI基础知识**: - JNI是Java平台的一部分,为Java应用程序提供了与本地代码交互的能力。开发者可以通过JNI在...
1. **多线程基础**: - 在C#中,我们可以通过`System.Threading`命名空间中的`Thread`类创建并管理线程。创建新线程通常通过`new Thread()`构造函数,然后调用`Start()`方法启动。 - 线程有两种类型:主线程和工作...
总的来说,理解和掌握多线程、委托和回调对于提升C#编程技能至关重要,它们是构建高效、灵活应用的基础。通过研究提供的源码工具,你可以加深对这些概念的理解,并能更好地应用到自己的项目中。
6. **事件和回调**:在多线程环境中,事件和回调函数经常用于线程间的通信。例如,一个线程完成特定任务后,可以通过触发事件通知其他线程。 7. **线程安全**:线程安全是确保在多线程环境下,共享数据的正确性和...
#### 一、理解回调函数与多线程的基础概念 在Python中,回调函数是一种将函数作为参数传递给另一个函数的方式,并在这个被调用的函数内部执行该参数函数。这种方式使得我们可以更加灵活地控制程序流程,特别是在...
- Android应用中,所有与界面相关的操作必须在UI线程执行,因此进度回调需确保在UI线程上进行。 - 通过使用Handler或者Android的runOnUiThread()方法,可以在不阻塞主线程的情况下更新UI。 7. **项目结构**: - ...
#### 四、回调与异步的区别 虽然回调通常与异步调用一起出现,但它们之间是有区别的: - **回调**侧重于“调用后回叫”,即在某个事件发生后调用预先注册的方法。 - **异步**则更强调非阻塞的特性,即发送请求后...
在基于QT的多线程定时器项目中,我们主要探讨的是如何在QT环境中利用多线程和定时器功能来实现特定的程序逻辑。 1. **QT中的线程(QThread)** 在QT中,`QThread`类是处理线程的基础。通过继承`QThread`,我们可以...
Libevent提供了一个事件基础结构,它能够将来自不同来源的事件(如网络连接、定时器或信号)与相应的回调函数关联起来。当特定事件发生时,Libevent会调用对应的回调函数,从而避免了轮询检查的低效。这种机制特别...
委托可以实现事件处理和回调机制,同时也是实现多线程同步和异步操作的关键工具。 在多线程编程中,`ThreadPool`和`Task`类经常与委托一起使用。`ThreadPool`提供了一种池化的线程资源,可以高效地复用线程,而`...
5. **更新进度**:在下载过程中,通过回调或事件处理程序更新UI线程中的进度条。需要注意的是,由于UI线程和下载线程不是同一个线程,所以需要使用Invoke或BeginInvoke方法来安全地修改UI控件。 6. **合并下载的...
在C#编程中,开发人员经常需要处理网络数据的下载任务,特别是在大数据量或需要优化性能的情况下,多线程技术的应用变得尤为重要。本篇将详细探讨如何基于`HttpWebRequest`和多线程来实现一个高效的文件下载类。 ...
2. 线程同步:当多个线程访问共享资源时,可能会出现竞态条件,此时需要使用同步机制,如锁(Mutex、Semaphore、Monitor)、信号量(ManualResetEvent、AutoResetEvent)或异步回调等,确保数据的一致性。...
核心概念是事件基础,它监控文件描述符、信号、定时器等,当有事件发生时,libevent会通知回调函数进行处理。 2. **HTTP POST**:HTTP协议中的一种请求方法,用于向服务器发送数据,如表单提交、文件上传等。POST...
异步链接,并且放入到线程中去执行,线程池的基础,代码使用两个用户,放入到一个线程中执行,同理,可以多个用户放入到多个线程中执行,为线程池执行websocket client 打下了基础。
5. **线程同步与通信**:在多线程环境中,同步和通信是非常重要的。MFC提供了多种同步对象,如`CSemaphore`(信号量)、`CCriticalSection`(临界区)等,用于控制线程的执行顺序和资源访问。此外,`CEvent`可以用于...
Delphi提供了多种多线程控件和组件,如TThread类,它是VCL框架中的基础线程类。通过继承TThread,我们可以创建自定义的线程类,覆盖Execute方法来实现线程的具体功能。例如,你可能在Execute方法中编写下载、计算或...
- **异步回调**:`ThreadPool.QueueUserWorkItem`方法允许在线程完成时执行回调方法。 6. **线程优先级** - C#中的线程有不同优先级,但应谨慎使用,因为操作系统调度策略可能导致预期外的行为。 7. **异常处理*...
#### 多线程基础 多线程编程可以让程序在多个线程上并行执行不同的任务,从而提高程序的执行效率。在C#中,`System.Threading`命名空间提供了多种工具来支持多线程编程,如`Thread`类、`ThreadPool`、`Monitor`等。 ...