- 浏览: 3558356 次
- 性别:
- 来自: 杭州
文章分类
- 全部博客 (1491)
- Hibernate (28)
- spring (37)
- struts2 (19)
- jsp (12)
- servlet (2)
- mysql (24)
- tomcat (3)
- weblogic (1)
- ajax (36)
- jquery (47)
- html (43)
- JS (32)
- ibatis (0)
- DWR (3)
- EXTJS (43)
- Linux (15)
- Maven (3)
- python (8)
- 其他 (8)
- JAVASE (6)
- java javase string (0)
- JAVA 语法 (3)
- juddiv3 (15)
- Mule (1)
- jquery easyui (2)
- mule esb (1)
- java (644)
- log4j (4)
- weka (12)
- android (257)
- web services (4)
- PHP (1)
- 算法 (18)
- 数据结构 算法 (7)
- 数据挖掘 (4)
- 期刊 (6)
- 面试 (5)
- C++ (1)
- 论文 (10)
- 工作 (1)
- 数据结构 (6)
- JAVA配置 (1)
- JAVA垃圾回收 (2)
- SVM (13)
- web st (1)
- jvm (7)
- weka libsvm (1)
- weka屈伟 (1)
- job (2)
- 排序 算法 面试 (3)
- spss (2)
- 搜索引擎 (6)
- java 爬虫 (6)
- 分布式 (1)
- data ming (1)
- eclipse (6)
- 正则表达式 (1)
- 分词器 (2)
- 张孝祥 (1)
- solr (3)
- nutch (1)
- 爬虫 (4)
- lucene (3)
- 狗日的腾讯 (1)
- 我的收藏网址 (13)
- 网络 (1)
- java 数据结构 (22)
- ACM (7)
- jboss (0)
- 大纸 (10)
- maven2 (0)
- elipse (0)
- SVN使用 (2)
- office (1)
- .net (14)
- extjs4 (2)
- zhaopin (0)
- C (2)
- spring mvc (5)
- JPA (9)
- iphone (3)
- css (3)
- 前端框架 (2)
- jui (1)
- dwz (1)
- joomla (1)
- im (1)
- web (2)
- 1 (0)
- 移动UI (1)
- java (1)
- jsoup (1)
- 管理模板 (2)
- javajava (1)
- kali (7)
- 单片机 (1)
- 嵌入式 (1)
- mybatis (2)
- layui (7)
- asp (12)
- asp.net (1)
- sql (1)
- c# (4)
- andorid (1)
- 地价 (1)
- yihuo (1)
- oracle (1)
最新评论
-
endual:
https://blog.csdn.net/chenxbxh2 ...
IE6 bug -
ice86rain:
你好,ES跑起来了吗?我的在tomcat启动时卡在这里Hibe ...
ES架构技术介绍 -
TopLongMan:
...
java public ,protect,friendly,private的方法权限(转) -
贝塔ZQ:
java实现操作word中的表格内容,用插件实现的话,可以试试 ...
java 读取 doc poi读取word中的表格(转) -
ysj570440569:
Maven多模块spring + springMVC + JP ...
Spring+SpringMVC+JPA
我们多线程之间有时候执行的时候要交换线程之间的数据,这样我们可以用的是exchager这个类的。
默认的数据返回应该是boolean类型的,在定义这个对象的时候要进行泛型的指定。下面请看举例。
例子是学生和老师进行名片的交换。
场景设置:
新学期开始了,学生和老师碰面了,学生拿出名片的时间10秒,老师拿出名片的时间是20秒,然后交换名片,各自打印出来。
//学生线程类 package endual; import java.util.concurrent.Exchanger; public class Student implements Runnable{ private Exchanger<String> ex ; public Student(Exchanger<String> ex) { this.ex = ex ; } public void run() { String msg = "Student" ; System.out.println("我是学生,我现在的信息是:" + msg) ; try { Thread.sleep(10000) ; } catch (InterruptedException e1) { // TODO Auto-generated catch block e1.printStackTrace(); } try { msg = ex.exchange(msg) ; System.out.println("我是学生我现在的信息是 :" + msg) ; } catch (InterruptedException e) { // TODO Auto-generated catch block e.printStackTrace(); } } }
老师的线程类
package endual; import java.util.concurrent.Exchanger; public class Teacher implements Runnable { private Exchanger<String> ex ; public Teacher(Exchanger<String> ex) { this.ex = ex ; } public void run() { String msg = "teacher" ; System.out.println("我是老师,我现在的信息是" + msg) ; try { Thread.sleep(20000) ; } catch (InterruptedException e1) { // TODO Auto-generated catch block e1.printStackTrace(); } try { msg = ex.exchange(msg) ; System.out.println("我是老师,我现在的信息是 :" + msg) ; } catch (InterruptedException e) { // TODO Auto-generated catch block e.printStackTrace(); } } }
测试的类 用到了线程池的
package endual; import java.util.concurrent.Exchanger; import java.util.concurrent.ExecutorService; import java.util.concurrent.Executors; /** * Exchanger 表示的两个线程之间进行数据交换用的 * @author endual * */ public class ExchangerApp { public static void main(String[] args) { ExecutorService es = Executors.newCachedThreadPool() ; Exchanger<String> ex = new Exchanger<String>() ; Thread t1 = new Thread(new Student(ex)) ; Thread t2 = new Thread(new Teacher(ex)) ; es.execute(t1) ; es.execute(t2) ; } }
打印的结构是
我是学生,我现在的信息是:Student 我是老师,我现在的信息是teacher 我是老师,我现在的信息是 :Student 我是学生我现在的信息是 :teacher
其实从时间的运行时间来看是一样的,谁先完成工作,谁就会在等待的,并不是谁先完成工作了,马上就主动的进行数据的交换而是要等待大家都完成了工作了,才进行彼此的数据交换的
发表评论
-
snmp
2020-04-13 11:07 429https://www.iteye.com/blog/zhan ... -
snmp
2020-04-10 21:33 566https://blog.csdn.net/qq_333141 ... -
服务器监控软件
2019-12-31 11:07 513[ERROR] org.hyperic.sigar.Sigar ... -
多数据源
2019-12-23 22:09 455https://gitee.com/baomidou/dyna ... -
mybatis多数据源
2019-12-23 18:09 449https://blog.csdn.net/qq_288042 ... -
springboot ueditor
2019-12-17 18:26 381https://blog.csdn.net/u01216982 ... -
java支持多数据源
2019-12-13 15:59 456spxcms是否支持多数据源 ... -
java日志
2019-12-10 12:01 297https://blog.csdn.net/peng_wei_ ... -
spring 多数据源
2019-12-06 09:55 432https://www.jb51.net/article/10 ... -
idea
2019-12-04 17:13 411https://blog.csdn.net/dengachao ... -
手机大屏
2019-11-30 16:02 350http://demo.demohuo.top/modals/ ... -
quarz配置
2019-11-08 11:48 462https://blog.csdn.net/BryantLmm ... -
mysql同步
2019-11-06 12:20 352https://blog.csdn.net/baidu_418 ... -
nginx配置多个服务
2019-11-04 20:35 775https://blog.csdn.net/everljs/a ... -
h5 加壳
2019-11-04 16:05 630https://jingyan.baidu.com/artic ... -
jeui 前端框架
2019-10-22 14:30 1208http://www.jemui.com/demo/ http ... -
jeui 维护
2019-10-22 14:29 2http://www.jemui.com/demo/ htt ... -
jeui 维护
2019-10-22 14:29 2http://www.jemui.com/demo/ -
jeui 维护
2019-10-22 14:29 2http://www.jemui.com/demo/ -
jeui 维护
2019-10-22 14:29 2http://www.jemui.com/demo/
相关推荐
本主题将深入探讨如何在MFC的多线程环境中通过消息传递来交换数据。 首先,我们要了解MFC对多线程的支持。MFC提供了一个CWinThread类,它是所有线程的基础。创建新线程时,通常会从CWinThread派生一个新的类,并...
本实验的任务是设计并实现一个数据单元,该单元包含学号和姓名两个字段,并且使用两个线程,一个用于写入数据,另一个用于读取数据。这种设计模式被称为“生产者-消费者”问题,是多线程编程中的经典案例。 首先,...
这个demo介绍了通过Handler在线程之间传递消息,demo中一个三个线程,主线程,发送消息的分线程,接收消息的分线程。发送消息的分线程会通知主线程更改标签文字,同时会通知接收消息的分线程更改进度条的进度。
即使用一个两个线程都能够共享的变量(如全局变量),这样两个线程都能够访问和修改该变量,从而达到共享数据的目的。 Qt 线程间共享数据是本文介绍的内容,多的不说,先来啃内容。Qt线程间共享数据主要有两种方式...
两个程序可以通过定义和调用公共的API(Application Programming Interface)来交换数据。这些API可以是函数库、Web服务接口(RESTful API、SOAP)或者是操作系统提供的服务。 4. **文件共享**: 数据可以通过...
为了实现这一目标,我们将文件内容分割成前后两部分,并创建两个线程,每个线程负责读取并处理一部分数据。这样做可以避免一次性加载整个文件到内存中,减少对系统资源的需求,同时利用多核处理器的优势,提高数据...
这两个类提供了线程同步机制,允许一个线程等待另一个线程完成其操作。例如,`AutoResetEvent`在被触发后会自动重置,只允许一个线程通过,而`ManualResetEvent`需要手动重置。 ```csharp using System.Threading; ...
串口通信,也称为RS-232通信,是计算机与设备之间进行数据交换的一种常见方式。它允许通过串行接口连接硬件设备,如传感器、打印机、GPS接收器等。在多线程环境中,我们可以通过创建独立的线程来同时管理两个串口,...
多线程进程间交换数据使用的共享内存多线程进程间交换数据使用的共享内存多线程进程间交换数据使用的共享内存多线程进程间交换数据使用的共享内存多线程进程间交换数据使用的共享内存
本文将深入探讨如何在Android环境中实现两个子线程之间的通信。 首先,理解Android线程模型至关重要。主线程,也称为UI线程,负责处理用户界面的更新和事件响应。为了不阻塞主线程,我们通常会在子线程中执行耗时...
在这个main方法中,程序通过两种方式创建了两个线程:一个打印1到1000之间的所有奇数,另一个打印所有偶数。通过使用while循环,程序会持续运行直到两个线程都完成了它们的任务。 总结来说,Java通过两种方式提供了...
这个例子中,`ThreadA`发送数据,`ThreadB`接收数据,展示了线程间的信号和槽通信。 请注意,实际项目中应根据需求选择合适的通信方式,考虑性能、安全性以及平台兼容性等因素。在编写多线程或多进程代码时,正确...
在多线程环境中,线程之间可能需要交换信息,例如通过消息队列、共享内存等方式。附加文本可能是这些通信过程中的重要数据,或者是用来记录线程执行情况的日志信息。 "取_类_函数地址"是获取类中函数的内存地址,这...
可以通过使用CSingleLock或CCriticalSection等同步对象来确保在任何时候只有一个线程能访问文件,防止数据冲突。 此外,调试时,可以借助串口调试助手工具,如RealTerm或PuTTY,实时查看串口通信的数据流,这有助于...
跨线程提交数据涉及到两个或多个线程之间共享和修改同一份数据。这通常需要特殊的同步机制,以防止竞态条件和死锁。竞态条件是指当两个或更多线程同时访问和修改同一资源时,结果依赖于线程的执行顺序,可能导致不...
这个实例“qt多线程实例-数据处理和UI界面显示”很可能是为了展示如何在不阻塞UI的情况下进行繁重的数据处理任务。 在单线程应用中,如果数据处理任务耗时较长,程序会冻结,用户界面无法响应,这将导致用户体验...
一个线程从A表读数据放入队列 N个线程从队列中取出数据,找到其在子表中的数据 对子表中的数据开3种线程:读,发email,标记状态 N个线程对完成的A表数据做最后处理 支持大数据量跑批,就是个例子,本来是公司发送...
1. **共享内存**:线程可以访问同一块内存空间,从而实现数据交换。为了防止数据竞争,需要使用互斥量(`mutex`)或临界区(`critical section`)等同步机制来保护共享资源。 2. **事件对象**:VC++中的事件对象(`...
"C# 高效线程安全,解决多线程写txt日志类.zip" 提供了一个专门用于多线程环境下写入txt日志文件的解决方案,确保了在并发写入时的数据一致性与程序稳定性。 首先,我们要理解什么是线程安全。线程安全是指当多个...
1,增加同时支持填整数型或子程序指针的函数指针!。 2,更正交换空数据时,可能存在的不跳出循环体. 3,增加延时参数,用于线程调用线程时,能起到降底CPU强度,方便提速取值!!。 @呵呵仙。