`
jiangzhoubai
  • 浏览: 58723 次
  • 性别: Icon_minigender_1
  • 来自: 太原
社区版块
存档分类
最新评论

多线程基础与回调

阅读更多
工作了一年了,一直没怎么多用线程一块,好薄弱,,今天看了看。自己写了个小例子。免的以后忘了。做的主要是线程监控返回值。即不用轮训,和设置变量。让线程通知主类(我做完活东西给你了。)

        直接上代码吧。
 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();
		}
	}
}


测试类
0
0
分享到:
评论
8 楼 jiangzhoubai 2012-03-29  
lemon_1227 写道
帅哥,那个 addlist,removelist 两个方法,不用加synchronized同步,因为你使用的是Vector,它本身就是线程安全的。

嗯,是的。谢谢拍砖了
7 楼 lemon_1227 2012-03-27  
帅哥,那个 addlist,removelist 两个方法,不用加synchronized同步,因为你使用的是Vector,它本身就是线程安全的。
6 楼 jiangzhoubai 2012-03-27  
lemon_1227 写道
jiangzhoubai 写道
lemon_1227 写道
jiangzhoubai 写道
lemon_1227 写道
兄弟,你写了个么个哦?我看不懂来,给个应用场景啊

1、节省了cpu的计算
2、如果多个对象关注这个线程,可以把自己添加到list中,表明自己关心。

像你说的这样的话,那么CallbackListener.srtartCallbackThread()方法要提供一个传入线程的参数噻。

callbackAndThread.addList(this);

我意思是,你再创建一个CallbackListener,你要把这个对象加入到已有线程中啊,而你给出的srtartCallbackThread()实现中,都是new 一个新线程哦

哦。明白了。 那块确实有点问题,是因为上次去清理电脑,你没给我插风扇的电源,为了测试温度,多跑几个线程这样写的。 后来没有删除。 

这块应该是new CallbackListener 的实现 add到list中。

不管怎么说谢谢兄弟了
5 楼 lemon_1227 2012-03-27  
jiangzhoubai 写道
lemon_1227 写道
jiangzhoubai 写道
lemon_1227 写道
兄弟,你写了个么个哦?我看不懂来,给个应用场景啊

1、节省了cpu的计算
2、如果多个对象关注这个线程,可以把自己添加到list中,表明自己关心。

像你说的这样的话,那么CallbackListener.srtartCallbackThread()方法要提供一个传入线程的参数噻。

callbackAndThread.addList(this);

我意思是,你再创建一个CallbackListener,你要把这个对象加入到已有线程中啊,而你给出的srtartCallbackThread()实现中,都是new 一个新线程哦
4 楼 jiangzhoubai 2012-03-27  
lemon_1227 写道
jiangzhoubai 写道
lemon_1227 写道
兄弟,你写了个么个哦?我看不懂来,给个应用场景啊

1、节省了cpu的计算
2、如果多个对象关注这个线程,可以把自己添加到list中,表明自己关心。

像你说的这样的话,那么CallbackListener.srtartCallbackThread()方法要提供一个传入线程的参数噻。

callbackAndThread.addList(this);
3 楼 lemon_1227 2012-03-27  
jiangzhoubai 写道
lemon_1227 写道
兄弟,你写了个么个哦?我看不懂来,给个应用场景啊

1、节省了cpu的计算
2、如果多个对象关注这个线程,可以把自己添加到list中,表明自己关心。

像你说的这样的话,那么CallbackListener.srtartCallbackThread()方法要提供一个传入线程的参数噻。
2 楼 jiangzhoubai 2012-03-27  
lemon_1227 写道
兄弟,你写了个么个哦?我看不懂来,给个应用场景啊

1、节省了cpu的计算
2、如果多个对象关注这个线程,可以把自己添加到list中,表明自己关心。
1 楼 lemon_1227 2012-03-27  
兄弟,你写了个么个哦?我看不懂来,给个应用场景啊

相关推荐

    C++JNI多线程回调java

    本示例聚焦于"C++ JNI多线程回调Java",即在C++中创建多线程,并在这些线程中通过JNI回调Java代码。 首先,我们需要理解JNI的基本概念。JNI是一种接口,它定义了Java虚拟机(JVM)如何与本地代码(如C++)交互。这...

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

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

    c# 多线程(轮询,等待,回调)操作实例

    1. **多线程基础**: - 在C#中,我们可以通过`System.Threading`命名空间中的`Thread`类创建并管理线程。创建新线程通常通过`new Thread()`构造函数,然后调用`Start()`方法启动。 - 线程有两种类型:主线程和工作...

    多线程-委托-回调实例.zip

    总的来说,理解和掌握多线程、委托和回调对于提升C#编程技能至关重要,它们是构建高效、灵活应用的基础。通过研究提供的源码工具,你可以加深对这些概念的理解,并能更好地应用到自己的项目中。

    C#多线程基础知识资料合辑(基础部分)

    6. **事件和回调**:在多线程环境中,事件和回调函数经常用于线程间的通信。例如,一个线程完成特定任务后,可以通过触发事件通知其他线程。 7. **线程安全**:线程安全是确保在多线程环境下,共享数据的正确性和...

    python回调函数中使用多线程的方法

    #### 一、理解回调函数与多线程的基础概念 在Python中,回调函数是一种将函数作为参数传递给另一个函数的方式,并在这个被调用的函数内部执行该参数函数。这种方式使得我们可以更加灵活地控制程序流程,特别是在...

    OkHttp简单封装,支持进度UI线程回调

    - Android应用中,所有与界面相关的操作必须在UI线程执行,因此进度回调需确保在UI线程上进行。 - 通过使用Handler或者Android的runOnUiThread()方法,可以在不阻塞主线程的情况下更新UI。 7. **项目结构**: - ...

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

    #### 四、回调与异步的区别 虽然回调通常与异步调用一起出现,但它们之间是有区别的: - **回调**侧重于“调用后回叫”,即在某个事件发生后调用预先注册的方法。 - **异步**则更强调非阻塞的特性,即发送请求后...

    基于QT的多线程定时器

    在基于QT的多线程定时器项目中,我们主要探讨的是如何在QT环境中利用多线程和定时器功能来实现特定的程序逻辑。 1. **QT中的线程(QThread)** 在QT中,`QThread`类是处理线程的基础。通过继承`QThread`,我们可以...

    libevent多线程处理

    Libevent提供了一个事件基础结构,它能够将来自不同来源的事件(如网络连接、定时器或信号)与相应的回调函数关联起来。当特定事件发生时,Libevent会调用对应的回调函数,从而避免了轮询检查的低效。这种机制特别...

    NET多线程与委托实例

    委托可以实现事件处理和回调机制,同时也是实现多线程同步和异步操作的关键工具。 在多线程编程中,`ThreadPool`和`Task`类经常与委托一起使用。`ThreadPool`提供了一种池化的线程资源,可以高效地复用线程,而`...

    C# Winform 多线程下载

    5. **更新进度**:在下载过程中,通过回调或事件处理程序更新UI线程中的进度条。需要注意的是,由于UI线程和下载线程不是同一个线程,所以需要使用Invoke或BeginInvoke方法来安全地修改UI控件。 6. **合并下载的...

    C# httpwebrequest 多线程下载类

    在C#编程中,开发人员经常需要处理网络数据的下载任务,特别是在大数据量或需要优化性能的情况下,多线程技术的应用变得尤为重要。本篇将详细探讨如何基于`HttpWebRequest`和多线程来实现一个高效的文件下载类。 ...

    ASP.NET多线程源码

    2. 线程同步:当多个线程访问共享资源时,可能会出现竞态条件,此时需要使用同步机制,如锁(Mutex、Semaphore、Monitor)、信号量(ManualResetEvent、AutoResetEvent)或异步回调等,确保数据的一致性。...

    libevent 多线程 HTTP post服务器

    核心概念是事件基础,它监控文件描述符、信号、定时器等,当有事件发生时,libevent会通知回调函数进行处理。 2. **HTTP POST**:HTTP协议中的一种请求方法,用于向服务器发送数据,如表单提交、文件上传等。POST...

    qt websocket 客户端 多线程使用

    异步链接,并且放入到线程中去执行,线程池的基础,代码使用两个用户,放入到一个线程中执行,同理,可以多个用户放入到多个线程中执行,为线程池执行websocket client 打下了基础。

    MFC多线程编程实例----多线程画线源码

    5. **线程同步与通信**:在多线程环境中,同步和通信是非常重要的。MFC提供了多种同步对象,如`CSemaphore`(信号量)、`CCriticalSection`(临界区)等,用于控制线程的执行顺序和资源访问。此外,`CEvent`可以用于...

    delphi 的多线程控件

    Delphi提供了多种多线程控件和组件,如TThread类,它是VCL框架中的基础线程类。通过继承TThread,我们可以创建自定义的线程类,覆盖Execute方法来实现线程的具体功能。例如,你可能在Execute方法中编写下载、计算或...

    C#多线程数据采集器

    - **异步回调**:`ThreadPool.QueueUserWorkItem`方法允许在线程完成时执行回调方法。 6. **线程优先级** - C#中的线程有不同优先级,但应谨慎使用,因为操作系统调度策略可能导致预期外的行为。 7. **异常处理*...

    Timer及多线程编程

    #### 多线程基础 多线程编程可以让程序在多个线程上并行执行不同的任务,从而提高程序的执行效率。在C#中,`System.Threading`命名空间提供了多种工具来支持多线程编程,如`Thread`类、`ThreadPool`、`Monitor`等。 ...

Global site tag (gtag.js) - Google Analytics