- 浏览: 77392 次
- 性别:
- 来自: 深圳
文章分类
最新评论
/* 线程间通讯: 其实就是多线程在操作同一个资源。 但是操作的动作不同 */ class Res{ String name; String sex; } class Input implements Runnable{ private Res r; Input(Res r){ this.r = r; } public void run(){ int x = 0; while(true){ if(x==0){ r.name = "mike"; r.sex = "man"; } else{ r.name = "哈哈"; r.sex = "女"; } x = (x+1)%2; } } } class Output implements Runnable{ private Res r; Output(Res r){ this.r = r; } public void run(){ while(true){ System.out.println(r.name+"--"+r.sex); } } } class InputOutput{ public static void main(String[] args){ Res r = new Res(); Input in = new Input(r); Output out = new Output(r); Thread t1 = new Thread(in); Thread t2 = new Thread(out); t1.start(); t2.start(); } }
运行结果:
哈哈--man
mike--女
mike--女
mike--女
哈哈--女
mike--女
哈哈--女
mike--女
哈哈--man
哈哈--man
哈哈--man
mike--女
哈哈--女
mike--man
mike--man
mike--man
mike--man
哈哈--女
哈哈--女
————————————————————————————————————
产生该结果原因在于:
两个线程共同操作name和sex,会出现情况是,线程input还没赋值完,output就已经将
变量值输出了。
操作共同资源的代码为
while(true){ if(x==0){ r.name = "mike"; r.sex = "man"; } else{ r.name = "哈哈"; r.sex = "女"; } x = (x+1)%2; }
while(true){ System.out.println(r.name+"--"+r.sex); }
要加上同步。因为当前代码中,只有r对象是唯一的,所以以r为synchronized传递的对象。
/* 线程间通讯: 其实就是多线程在操作同一个资源。 但是操作的动作不同 */ class Res{ String name; String sex; } class Input implements Runnable{ private Res r; Input(Res r){ this.r = r; } public void run(){ int x = 0; while(true){ synchronized(r){ if(x==0){ r.name = "mike"; r.sex = "man"; } else{ r.name = "哈哈"; r.sex = "女"; } x = (x+1)%2; } } } } class Output implements Runnable{ private Res r; Output(Res r){ this.r = r; } public void run(){ while(true){ synchronized(r){ System.out.println(r.name+"--"+r.sex); } } } } class InputOutput{ public static void main(String[] args){ Res r = new Res(); Input in = new Input(r); Output out = new Output(r); Thread t1 = new Thread(in); Thread t2 = new Thread(out); t1.start(); t2.start(); } }
发表评论
-
151多线程(优先级&yield方法)
2015-10-28 11:16 694/* 养成习惯:数据共享用静态 */ class Dem ... -
150_多线程(Join方法)
2015-10-27 18:31 610/* join: 当A线程执行到了B线程的join方法 ... -
114_面向对象(多异常处理)_黑马程序员_Java基础视频
2015-10-25 23:27 695/* 对多异常的处理 1.生命异常时,建议声明更为具体的异 ... -
113_面向对象(异常声明throws)_黑马程序员_Java基础视频
2015-10-25 23:26 481/* 异常:就是程序在运行时出现不正常情况 异常由来:问题 ... -
112_面向对象(异常try-catch)
2015-10-25 23:25 733/* 异常:就是程序在运行时出现不正常情况 异常由来:问题 ... -
148_多线程(停止线程)
2015-10-25 23:16 580/* stop方法已经过时。 如何停止线程? 只有一 ... -
147_多线程(线程间通信-生产者消费者JDK5.0升级版)
2015-10-21 23:33 749/*JDK1.5及以上提供了多线程升级解决方案。 将同步Sy ... -
146_多线程(线程间通信-生产者消费者)
2015-10-20 23:35 626一个生产者一个消费者 ... -
144_多线程(线程间通信-等待唤醒机制)
2015-10-20 18:35 721class Res{ String name; Str ... -
141多线程-死锁
2015-10-20 14:45 693/* 死锁: 同步中嵌套同步 */ class T ... -
140_多线程(多线程-单例设计模式-懒汉式)
2015-10-19 11:45 688/* 单例设计模式 饿汉式 class Single ... -
138_多线程(多线程-同步函数的锁是this)
2015-10-15 14:48 847/* 同步函数用的是哪一个锁呢? 函数需要被对象调用。那么 ... -
137_多线程(多线程-同步函数)
2015-10-13 23:25 599/* 需求:银行有一个金库。 有两个储户分别存300元 ... -
135_多线程(多线程的安全问题)
2015-10-13 18:07 609class TWindow implements Runnab ... -
多线程(创建线程-实现Runnable接口)
2015-10-10 00:19 554class TWindow implements Runnab ... -
133_多线程(售票的例子)
2015-10-09 23:48 645/* 需求:简单的买票程序 多个窗口卖票 */ c ... -
132_多线程(获取线程对象以及名称)
2015-10-09 23:30 1216/* 练习:创建两个线程,和主线程交替运行 线程都有自 ... -
多线程-继承Thread类
2015-10-09 00:26 1560/* 进程:是一个正在执行中的程序 每一个进程执行都有一个 ... -
包的应用
2015-10-08 23:28 1665package pack; class PackageD ... -
异常总结
2015-10-05 20:07 574异常是什么? 是对问题的描述,将问题进行对象的封装。 ...
相关推荐
在实际开发中,我们需要掌握如何控制和管理线程的生命周期,包括线程同步、线程间通信、线程优先级以及中断和守护线程的概念。例如,可以使用`synchronized`关键字来防止数据竞争,用`join()`方法让一个线程等待另一...
在本文中,我们将深入探讨如何在Microsoft Visual C++ 6.0(简称VC6.0)环境下进行多线程编程,特别关注线程的创建、暂停、停止以及线程间的通信。多线程编程是软件开发中的一个重要概念,它允许程序同时执行多个...
事件对象是Windows API中用于线程间通信的一种同步机制。它可以被设置为有信号状态或无信号状态,线程通过WaitForSingleObject或WaitForMultipleObjects函数等待事件状态的改变。事件对象主要有两种类型:手动重置...
4. **多线程通信**:线程间通信可能涉及`pthread_join()`(等待线程结束)、`pthread_cond_t`条件变量、信号量等机制,以协调不同线程的执行流程。 5. **错误处理**:多线程编程中,良好的错误处理至关重要,如检查...
总结来说,基于TCP的局域网多用户通信和文件传送程序利用TCP的可靠性和多线程技术,实现了高效、稳定的文件共享。通过"飞鸽传书"这样的应用,用户可以轻松地在局域网内进行文件交换,提高了工作效率。对于开发者来说...
4. 同步与通信:多线程环境下,线程间的同步和通信至关重要。Delphi提供了多种同步机制,如TCriticalSection(临界区)、TSemaphore(信号量)、TMutex(互斥锁)等,以及TEvent(事件)和TThread.Synchronize方法来...
- **线程间的通信可以通过共享内存、管道、消息队列、套接字等方式实现。** 6. **线程调度策略**: Linux提供多种线程调度策略,如SCHED_OTHER(默认,轮转),SCHED_FIFO(先入先出,实时),SCHED_RR(时间片...
在Java多线程编程中,线程间的通信是非常重要的概念,用于协调多个并发执行的任务。线程的状态转换是理解线程通信的基础,主要包括四个状态:新(New)、可执行(Runnable)、死亡(Dead)和停滞(Blocked)。新状态...
3. **线程同步与通信**:在多线程环境中,线程间的同步和通信是必不可少的。VB提供了Mutex、Semaphore、EventWaitHandle等同步机制,确保对共享资源的安全访问。在多线程下载中,可能需要确保所有线程在写入文件时...
- **线程间通信**:除了同步机制外,可能还需要线程间的通信方式,如共享内存、消息队列或管道等。 总之,"CollThread_delphi_多线程_"这个实例为开发者提供了一个学习和实践Delphi多线程编程的好机会,尤其是在...
总的来说,MFC-TCP.rar是一个关于使用MFC进行TCP通信的实例,涵盖了多线程服务器设计、客户端连接处理、异步I/O操作以及线程间通信等多个关键点。对于想要深入理解和实践MFC和TCP通信的开发者来说,这是一个非常有...
此外,线程间的通信可以通过消息队列、事件对象、临界区或互斥量等同步机制来实现。 端口扫描是网络诊断和安全检查的一种常见方法,通过尝试连接目标主机的多个端口来判断哪些服务正在运行。在多线程环境中,每个...
8. **Example_Golbals.au3**: 全局变量在多线程中用于线程间的通信和数据共享。这个例子可能展示了如何安全地使用全局变量,防止数据冲突和不一致。 9. **Example_Reciever.au3**: 可能是一个接收线程的例子,用于...
在IT行业中,线程同步通信技术是多线程编程中的核心概念,特别是在高并发和分布式系统设计中。张孝祥老师的课程"传智播客_张孝祥_传统线程同步通信技术"深入浅出地讲解了这一主题,旨在帮助开发者理解和掌握线程间的...
套接字是进程间通信(IPC)的一种方式,尤其适用于网络通信。服务器端通过调用`socket()`函数创建套接字,`bind()`函数将套接字与特定的IP地址和端口号绑定,`listen()`函数设置最大连接队列长度,然后`accept()`...
同时,Delphi还提供了同步机制,如TEvent、TCriticalSection和TMutex等,以确保在多线程环境中的数据安全和线程间通信。 在"CollThread"这个例子中,数据采集可能在单独的线程中运行,以便不影响主应用程序的响应...
synchronized用于保证同一时刻只有一个线程访问共享资源,而wait()和notify()用于线程间的通信,实现线程间的数据交换。 三、线程池 Java的ExecutorService和ThreadPoolExecutor类提供了线程池管理功能。线程池可以...
除了基本的线程操作,Python的`threading`模块还包含了一些其他功能,如定时器(`Timer`)用于延迟执行任务,事件(`Event`)用于线程间通信,以及线程池(`ThreadPoolExecutor`)用于管理和调度线程。 多线程并非...
3. **线程通信**:QT提供了一些信号和槽机制,使得不同线程间的通信变得简单。通过QObject的connect()函数,可以连接主线程和工作线程的信号与槽,实现数据传递。 4. **线程同步**:为了避免竞态条件和死锁,QT提供...