- 浏览: 515715 次
- 性别:
- 来自: 武汉
文章分类
- 全部博客 (268)
- C/C++ (5)
- LUA (0)
- JVM (6)
- UML (1)
- J2SE (43)
- J2EE (15)
- EXTJS (1)
- HTML5 (47)
- ANDROID (2)
- JAVASCRIPT (51)
- WEB SERVICES (0)
- 数据库 (2)
- 数据结构 (0)
- 应用服务器 (11)
- 设计模式应用 (0)
- JAVA性能与缓存 (1)
- ByteCode (5)
- RCP (0)
- Plugin (0)
- Eclipse (3)
- 程序人生 (14)
- Mobile (2)
- Linux/Ubuntu (31)
- sublime (2)
- python (15)
- Git (5)
- NodeJs (3)
- Crosswalk (1)
- Browserify (1)
- Backbone (1)
最新评论
传统线程间通信
// 传统的线程通信 public class TraditionalThreadCommunication { public static void main(String[] args) { final Business business = new Business(); new Thread(new Runnable() { @Override public void run() { for (int i = 1; i <= 50; i++) { business.sub(i); } } }).start(); // 注意:若将主线程代码放到子线程前执行,程序将死锁, // 因主线程一直等待,而子线程又无法去执行改变变量值. for (int i = 1; i <= 50; i++) { business.main(i); } } } class Business { // 让子线程先运行 private boolean bShouldSub = true; public synchronized void sub(int i) { System.out.println("sub()..."); while (!bShouldSub) { try { this.wait(); } catch (InterruptedException e) { e.printStackTrace(); } } for (int j = 1; j <= 10; j++) { System.out.println("sub thread sequence of " + j + ",loop of " + i); } bShouldSub = false; this.notify(); } public synchronized void main(int i) { System.out.println("main()..."); while (bShouldSub) { try { this.wait(); } catch (InterruptedException e) { e.printStackTrace(); } } for (int j = 1; j <= 100; j++) { System.out.println("main thread sequence of " + j + ",loop of " + i); } bShouldSub = true; this.notify(); } }
基于Lock与Condition的线程通信
Condition的功能类似在传统线程中的wait()和notify()的功能,在等待Condition时,允许发生"虚假唤醒",这通常作为对基础平台语义的让步,对于大多数应用程序,这带来的影响很小,因Condition应总是在一个循环中被等等,并测试正被等待的状态声明,某个实现可以随意移除可能的虚假唤醒,但建议应用程序中虚假唤醒可能发生,因此总是在一个循环中等待.
public class ConditionCommunication { public static void main(String[] args) { final Business business = new Business(); new Thread(new Runnable() { @Override public void run() { for (int i = 1; i <= 50; i++) { business.sub(i); } } }).start(); for (int i = 1; i <= 50; i++) { business.main(i); } } static class Business { // 可重入锁 Lock lock = new ReentrantLock(); Condition condition = lock.newCondition(); // 让子线程先运行 private boolean bShouldSub = true; public void sub(int i) { lock.lock(); System.out.println("sub lock status:" + ((ReentrantLock)lock).isLocked()); try { while (!bShouldSub) { try { condition.await(); } catch (Exception e) { e.printStackTrace(); } } for (int j = 1; j <= 10; j++) { System.out.println("sub thread sequence of " + j + ",loop of " + i); } bShouldSub = false; condition.signal(); } finally { lock.unlock(); } } public void main(int i) { lock.lock(); System.out.println("main lock status:" + ((ReentrantLock)lock).isLocked()); try { while (bShouldSub) { try { condition.await(); } catch (Exception e) { e.printStackTrace(); } } for (int j = 1; j <= 100; j++) { System.out.println("main thread sequence of " + j + ",loop of " + i); } bShouldSub = true; condition.signal(); } finally { lock.unlock(); } } } }
发表评论
文章已被作者锁定,不允许评论。
-
关于Thread.IsAlive属性
2015-07-04 12:12 882今天在讨论多线程的时候,谈到了这个属性。IsAlive,顾名 ... -
Java:对象的强、软、弱和虚引用
2015-02-28 11:00 731文章源自:http://zhangjunhd.blog.51 ... -
一个通用并发对象池的实现
2015-01-20 09:32 733Source: http://ifeve.com/gener ... -
如何创建不可变的Java类或对象
2015-01-07 16:29 2183在学习编程的过程中,我觉得不止要获得课本的知识,更多的是通过 ... -
并发队列ConcurrentLinkedQueue和阻塞队列LinkedBlockingQueue用法
2014-12-29 11:49 803文章源自:http://www.cnblogs.com/li ... -
中断线程深入
2014-12-25 15:18 795本文转自http://jiangzhengjun.itey ... -
深入java.lang.ThreadLocal类
2014-12-24 16:50 707文章源自:http://lavasoft.blog.51c ... -
Java 8新特性探究(3):解开lambda最强作用的神秘面纱
2014-07-10 17:50 711文章源自:http://developer.51cto.co ... -
Java 8特性探究(2):深入解析默认方法
2014-07-08 11:12 782文章源自:http://develop ... -
Java 8特性探究(1):通往lambda之路_语法篇
2014-07-08 09:59 691文章源自:http://developer.51cto.c ... -
java文件复制方法参考
2013-12-02 14:17 730最快的文件复制方法 private static ... -
用Java数字签名提供XML安全
2013-11-29 16:11 13134文章源自:http://www. ... -
深入理解HashMap的工作原理
2013-11-18 15:49 824HashMap的工作原理是近 ... -
JDBC4.0 驱动加载过程
2013-01-16 10:09 3634注意,jdbc4.0不再需要显示调用class.fo ... -
Java自定义的类加载器
2013-01-15 08:38 1014一、类加载器类别 * 1.java虚拟机自带的加载器 ... -
使用Log4j生成不同日志级别的日志文件
2012-12-26 17:09 5331在src根目录下存放log4j.xml文件,具体配置如下(测试 ... -
深入理解HashMap
2012-12-13 10:08 865文章摘自:http://www.iteye.c ... -
java字节码加解密
2012-06-30 09:53 1096一.创建KEY class Key { ... -
java动态代理简单实现
2012-06-30 09:45 1026一.接口 public interface Foo { ... -
线程池简单实现
2012-06-25 11:42 1097其实线程池的实现就是生产者消费者问题 的实现,理解了生产者消 ...
相关推荐
然而,当一个应用程序中有多个线程运行时,它们可能需要共享数据或协调工作,这就涉及到线程间通信(Inter-Thread Communication,简称ITC)。MFC(Microsoft Foundation Classes)库,作为Windows平台上C++开发的...
在多线程编程中,线程间通信是一个关键的概念,用于协调不同线程之间的操作,确保数据的一致性和正确性。本示例“线程间通信方式3:消息传递方式”着重介绍了通过消息传递实现线程间的通信。下面将详细阐述这种通信...
本文将深入探讨“VC多线程例程七”,重点介绍线程间通信这一关键概念,并结合源码分析,以MultiThread7项目为例进行详细讲解。 线程是操作系统分配CPU时间的基本单位,一个进程中可以有多个线程并行运行。在VC++中...
本文将重点探讨线程间的通信方式,特别是通过全局变量进行线程间通信的方法以及为了解决数据竞争问题而引入的同步和互斥机制。 首先,线程间通信指的是在同一个进程中的多个线程之间交换信息或数据的过程。由于线程...
本文将详细探讨“线程间通信方式2:参数传递方式”,并通过对不同创建线程方法的分析,展示如何有效地传递参数。 1. **线程创建方法** 在Windows API中,我们通常使用以下三种方法创建线程: - **CreateThread...
采用的是C#的Winform开发,提供了两种线程交互的方式。 第一:在主线程中开启两个子线程,子线程用事件方式来进行通信。对于主线程的控件操作采用的是delegate委托的方式,避免主线程假死。 第二:采用的是...
【Windows 2000线程间通信】是操作系统中的一种机制,允许同一进程或不同进程的线程之间进行信息交换。这一通信机制基于Windows 2000提供的内核对象,包括文件、文件映射、邮件槽和命名管道等多种方式。其中,文件和...
该程序是我写的博客“一起talk C栗子吧(第一百一十一回:C语言实例--线程间通信)”的配套程序,共享给大家使用
本实例将深入探讨Qt如何实现线程间通信以及线程与进程间通信,并提供简单易懂的代码示例。 一、Qt线程间通信 Qt通过信号和槽机制,使得线程间的通信变得直观且易于理解。信号是对象状态变化的通知,而槽是响应这些...
文档详细介绍了Handler实现线程间通信过程中源码的实现机制,并对其中的Looper,MessageQueue,Message对象的初始化及sendMessage()通过sendMessageDelayed()和sendMessageAtTime()过程的操作机流程
### Android线程间通信详解 #### 一、引言 Android应用程序通常运行在单个主线程上,称为“主线程”或“UI线程”。为了提高应用性能和用户体验,开发者经常需要利用多线程技术来执行后台任务,比如下载图片、获取...
Android线程间通信的Message机制Android线程间通信的Message机制Android线程间通信的Message机制Android线程间通信的Message机制Android线程间通信的Message机制
在Android应用开发中,线程间通信是必不可少的技能,特别是在涉及到UI更新和后台任务执行时。本主题将深入探讨如何在Android中实现线程间通信,并以显示同步时间为例,展示具体的操作流程。 首先,Android系统是...
在IT行业中,线程间通信(Inter-Thread Communication, ITC)是多线程编程中的一个关键概念。当一个程序包含多个并发执行的线程时,线程间通信用于协调它们之间的活动,确保数据的一致性和正确性。在这个场景中,...
本文将深入探讨“Qt线程间通信,线程控制界面显示”这一主题。 首先,理解Qt中的线程模型是非常重要的。Qt采用的是QThread类来实现线程管理。每个QThread对象代表一个操作系统级别的线程,通过继承QThread或者使用...
在Java编程中,线程间通信(Inter-Thread Communication,简称ITC)是并发编程中的一个重要概念,它涉及到如何在不同线程之间有效地共享数据和协调执行。在Java中,线程间通信主要通过多种机制实现,其中包括回调...
接下来,我们关注线程间通信。线程通信是线程协作完成任务的关键,它允许线程之间交换数据或同步操作。一种常见的通信机制是“生产者-消费者”模型,其中生产者线程生成数据,而消费者线程消费这些数据。在没有适当...
### Android中线程间通信详解 #### 一、引言 在Android开发中,线程间的通信是一项重要的技术。为了确保应用的响应性和流畅性,开发者必须了解如何正确地管理和同步多个线程之间的数据交换。本文将深入探讨Android...
4. **管道(Pipe)**和**套接字(Socket)**:这些是进程间通信(IPC)的方法,也可以用于线程间通信。例如,在服务器-客户端模型中,通过套接字进行通信,线程可以在同一进程中模拟网络通信,从而更好地理解线程通信的...
在Android开发中,线程间通信是一个至关重要的概念,它涉及到多线程处理以及UI更新。Handler、Looper和Message是Android系统提供的一套用于在不同线程之间传递消息和进行同步的关键组件。本文将深入探讨如何自定义...