- 浏览: 167459 次
- 性别:
- 来自: 杭州
文章分类
最新评论
-
mengyue0477:
最后还不忘吐槽一下 哈哈 太逗了
spring容器的懒加载lazy-init设置 -
comet0515:
不是maven工程能不能用checkstyle插件?job是一 ...
jenkins 配置checkstyle -
xfxlch:
http://docs.spring.io/spring-bo ...
NoteBook -
With_Me_Forever:
太浅了。我最近也在看着方面的资料,一起进步把。
互联网金融定义 -
xfxlch:
在http://r.m.baidu.com/6pmxgig
NoteBook
编程实现:
子线程循环10次,主线程循环100次,子线程再循环10次,主线程再循环100次,如此线程间交替执行50个轮回。
首先我们要有主子两个线程来分别执行10,100次的循环操作,这个相对来说简单:
TraditionalThreadCommuniction.class 是我的类名
上面这样就可以子线程和主线程就可以完成各自的循环任务了。
但是这样做并没有达到,主子线程都各自执行一次,然后轮回50次的要求。为此我们要对我们的代码进行改造。
首先我们对我们的主子线程任务进行抽象,把线程任务放到一个统一的类里,进行统一处理。
如下:
这是面向对象编程的思路,把相关业务处理类放到一个class里,其他业务方法只要调方法就就可以了,做到业务对外来应用的一个透明。
当然这样做还是不够的,并没有到达两个线程间通信和相互协作的目的。
通常为了让两者之间通信,我们需要添加一个变量bSubTread=true,当子线程执行好的时候,我们让子线程停下来,并且通知主线程去执行任务,主线程跑完之后,主线程再自己停下来,通知子线程去执行。如此才能达到我们最初的目的
最后的代码就是这个样子了:
子线程循环10次,主线程循环100次,子线程再循环10次,主线程再循环100次,如此线程间交替执行50个轮回。
首先我们要有主子两个线程来分别执行10,100次的循环操作,这个相对来说简单:
TraditionalThreadCommuniction.class 是我的类名
public static void main(String[] args) { new Thread(new Runnable() { public void run() { // 子线程执行 for (int j = 0; j < 50; j++) {// 轮回50次 synchronized (TraditionalThreadCommuniction.class) { for (int i = 0; i < 10; i++) { System.out.println("sub thread id " + i); } } } } }).start(); // 主线程执行 for (int j = 0; j < 50; j++) {// 轮回50次 synchronized (TraditionalThreadCommuniction.class) { for (int i = 0; i < 100; i++) { System.out.println("main thread id " + i); } } } }
上面这样就可以子线程和主线程就可以完成各自的循环任务了。
但是这样做并没有达到,主子线程都各自执行一次,然后轮回50次的要求。为此我们要对我们的代码进行改造。
首先我们对我们的主子线程任务进行抽象,把线程任务放到一个统一的类里,进行统一处理。
如下:
public static void main(String[] args) { final Bisuness bisuness = new Bisuness(); new Thread(new Runnable() { public void run() { // 子线程执行 for (int j = 0; j < 50; j++) {// 轮回50次 bisuness.sub(j); } } }).start(); // 主线程执行 for (int j = 0; j < 50; j++) {// 轮回50次 bisuness.main(j); } } static class Bisuness { public synchronized void sub(int j) { for (int i = 0; i < 10; i++) { System.out.println("sub thread id " + i + " loop id " + j); } } public synchronized void main(int j) { for (int i = 0; i < 100; i++) { System.out.println("main thread id " + i + " loop id " + j); } } }
这是面向对象编程的思路,把相关业务处理类放到一个class里,其他业务方法只要调方法就就可以了,做到业务对外来应用的一个透明。
当然这样做还是不够的,并没有到达两个线程间通信和相互协作的目的。
通常为了让两者之间通信,我们需要添加一个变量bSubTread=true,当子线程执行好的时候,我们让子线程停下来,并且通知主线程去执行任务,主线程跑完之后,主线程再自己停下来,通知子线程去执行。如此才能达到我们最初的目的
最后的代码就是这个样子了:
public static void main(String[] args) { final Bisuness bisuness = new Bisuness(); new Thread(new Runnable() { public void run() { // 子线程执行 for (int j = 0; j < 50; j++) {// 轮回50次 bisuness.sub(j); } } }).start(); // 主线程执行 for (int j = 0; j < 50; j++) {// 轮回50次 bisuness.main(j); } } static class Bisuness { boolean bSubTread = true; public synchronized void sub(int j) { if(!bSubTread) { try { this.wait(); } catch (InterruptedException e) { e.printStackTrace(); } } for (int i = 0; i < 10; i++) { System.out.println("sub thread id " + i + " loop id " + j); } bSubTread = false; this.notify(); } public synchronized void main(int j) { if(bSubTread){ try { this.wait(); } catch (InterruptedException e) { // TODO Auto-generated catch block e.printStackTrace(); } } for (int i = 0; i < 100; i++) { System.out.println("main thread id " + i + " loop id " + j); } bSubTread = true; this.notify(); } }
- TraditionalThreadCommuniction.zip (767 Bytes)
- 下载次数: 0
发表评论
-
eclipse project .setting
2016-08-24 11:30 606有一个文件在.setting的目录下面: 文件名:org.ec ... -
jar命令工具
2016-01-23 20:29 690背景: 今天介绍两个jar的命令工具,对我个人来说,还是比较好 ... -
Java的按值传递
2016-01-23 19:30 565问题: 最近在看Mar ... -
Mac OS 安装java 开发环境
2016-01-03 13:00 1775我的机器是: 1. jdk1.7下载安装 jdk7:h ... -
记一次Java Rest Service Hang住的经历
2015-12-28 20:08 2701背景: 在前后端分开开发的过程中,前段的页面要调用后台Java ... -
一个String字符串的问题2
2015-12-14 14:22 612背景: 今天遇到个问题: String str = & ... -
我读重构这本书
2015-12-01 22:30 0第一点:关注变量命名。好的变量名能让读者更快更好的理解程序到底 ... -
系统log的编写
2015-11-16 09:41 0log很关键,一定要记录好对追踪问题有帮助的日志。 -
CAS 授权问题
2015-11-16 09:40 0CAS 授权问题 -
Caused by: java.lang.UnsupportedOperationException 解决方案
2015-10-21 22:09 4084背景: 今天在跑一个UnitTest,跑的过程中想在list ... -
LogBack 框架里log-access的使用
2015-10-18 16:05 7105背景: 想通过配置log-access来实现直接使用浏览器来访 ... -
how to fix "org.hamcrest.CoreMatchers.containsString cannot be resolved"
2015-09-23 23:12 3030背景: 山姆大叔比较喜欢用一些新的技术和新的特性,最近在jun ... -
java 打印金字塔
2015-08-24 00:53 785背景: 一个同事,面试应聘者喜欢用学校里学过的一个书本或者课后 ... -
纯jsp servlet 实现 upload file功能
2015-08-17 20:35 747本篇主要是简单的实现jsp servlet 的上传文件的功能, ... -
dos 命令窗口執行java 命令,帶包路徑
2015-07-26 12:16 534記錄一下,是為了自己下次再run java命令的時候,可以很快 ... -
tomcat 远程调试
2015-07-23 18:41 491背景: 我们在项目开发过程中,很多时候会遇到这样的情况:项目在 ... -
使用android studio 来开发hello world app的时候,遇到的一些坑。
2015-07-13 01:38 2164使用android studio 来开发h ... -
ThreadLocal
2015-05-11 07:22 427Java线程:深入ThreadLocal ThreadLo ... -
Hibernate Interceptor(拦截器)
2015-04-28 20:30 2428需求: 对所有操作数据库的事件,添加audit log, 此l ... -
eclipse 加入tomcat 包
2015-03-24 01:09 432...
相关推荐
然而,当一个应用程序中有多个线程运行时,它们可能需要共享数据或协调工作,这就涉及到线程间通信(Inter-Thread Communication,简称ITC)。MFC(Microsoft Foundation Classes)库,作为Windows平台上C++开发的...
4. **三种线程通信方式结合**: - 在这个示例中,可能结合了同步和异步消息传递、事件对象(如事件句柄)以及信号量等机制。 - 同步消息传递:等待消息被处理后再继续执行,如SendMessage。 - 异步消息传递:发送...
本文将重点探讨线程间的通信方式,特别是通过全局变量进行线程间通信的方法以及为了解决数据竞争问题而引入的同步和互斥机制。 首先,线程间通信指的是在同一个进程中的多个线程之间交换信息或数据的过程。由于线程...
本文将深入探讨“VC多线程例程七”,重点介绍线程间通信这一关键概念,并结合源码分析,以MultiThread7项目为例进行详细讲解。 线程是操作系统分配CPU时间的基本单位,一个进程中可以有多个线程并行运行。在VC++中...
在多线程编程中,线程间的通信是一个关键概念,特别是在并发执行任务时,确保数据的一致性和正确性。本文将详细探讨“线程间通信方式2:参数传递方式”,并通过对不同创建线程方法的分析,展示如何有效地传递参数。 ...
【Windows 2000线程间通信】是操作系统中的一种机制,允许同一进程或不同进程的线程之间进行信息交换。这一通信机制基于Windows 2000提供的内核对象,包括文件、文件映射、邮件槽和命名管道等多种方式。其中,文件和...
采用的是C#的Winform开发,提供了两种线程交互的方式。 第一:在主线程中开启两个子线程,子线程用事件方式来进行通信。对于主线程的控件操作采用的是delegate委托的方式,避免主线程假死。 第二:采用的是...
本实例将深入探讨Qt如何实现线程间通信以及线程与进程间通信,并提供简单易懂的代码示例。 一、Qt线程间通信 Qt通过信号和槽机制,使得线程间的通信变得直观且易于理解。信号是对象状态变化的通知,而槽是响应这些...
"多线程之间的线程通信"是确保多个线程协同工作、避免数据不一致性和提高程序效率的关键概念。在本话题中,我们将深入探讨线程通信的原理、方法,以及潜在的危险。 首先,线程通信是指在一个进程中,不同的线程之间...
该程序是我写的博客“一起talk C栗子吧(第一百一十一回:C语言实例--线程间通信)”的配套程序,共享给大家使用
### Android线程间通信详解 #### 一、引言 Android应用程序通常运行在单个主线程上,称为“主线程”或“UI线程”。为了提高应用性能和用户体验,开发者经常需要利用多线程技术来执行后台任务,比如下载图片、获取...
线程通信是线程协作完成任务的关键,它允许线程之间交换数据或同步操作。一种常见的通信机制是“生产者-消费者”模型,其中生产者线程生成数据,而消费者线程消费这些数据。在没有适当的同步机制下,可能会出现数据...
Android线程间通信的Message机制Android线程间通信的Message机制Android线程间通信的Message机制Android线程间通信的Message机制Android线程间通信的Message机制
在Android应用开发中,线程间通信是必不可少的技能,特别是在涉及到UI更新和后台任务执行时。本主题将深入探讨如何在Android中实现线程间通信,并以显示同步时间为例,展示具体的操作流程。 首先,Android系统是...
文档详细介绍了Handler实现线程间通信过程中源码的实现机制,并对其中的Looper,MessageQueue,Message对象的初始化及sendMessage()通过sendMessageDelayed()和sendMessageAtTime()过程的操作机流程
Qt框架提供了一套强大的线程支持,使得开发者能够在不同线程间进行安全、高效的通信,同时保持界面的流畅更新。本文将深入探讨“Qt线程间通信,线程控制界面显示”这一主题。 首先,理解Qt中的线程模型是非常重要的...
在IT行业中,线程间通信(Inter-Thread Communication, ITC)是多线程编程中的一个关键概念。当一个程序包含多个并发执行的线程时,线程间通信用于协调它们之间的活动,确保数据的一致性和正确性。在这个场景中,...
4. **线程间通信**:线程间通信允许线程之间交换信息,Java提供了多种机制,如`wait()`, `notify()`, `notifyAll()`,Python中则有`Condition`对象。 5. **线程休眠**:Java的`Thread.sleep()`方法可以让线程暂停...
### Android中线程间通信详解 #### 一、引言 在Android开发中,线程间的通信是一项重要的技术。为了确保应用的响应性和流畅性,开发者必须了解如何正确地管理和同步多个线程之间的数据交换。本文将深入探讨Android...