(三)多线程之间实现通讯
来源:互联网 发布:mac ps返回 编辑:程序博客网 时间:2024/06/04 00:31
多线程之间实现通讯
多线程之间如何实现通讯
什么是多线程之间通讯?
多线程之间通讯,其实就是多个线程在操作同一个资源,但是操作的动作不同。
多线程之间通讯需求
案例:第一个线程写入(input)用户,另一个线程取读取(out)用户;实现读一个,写一个操作。
代码实战:
共享资源源实体类
/** 共享资源源实体类 */class UserInfo { public String userSex; public String userName;}
输入线程资源
public class InputThread extends Thread{ private UserInfo user; //构造函数 public InputThread (UserInfo user){ this.user=user; } @Override public void run() { int count=0; while (true){ if(count==1){ user.userName="大圣"; user.userSex="男"; }else{ user.userName="小红"; user.userSex="女"; } count=(count+1)%2; } } }
输出线程资源
public class OutputThread extends Thread{ private UserInfo user;// //构造函数 public OutputThread(UserInfo user){ this.user=user; } @Override public void run() { while (true) { System.out.println("userName:"+user.userName+"----userSex:"+user.userSex); } }}
运行代码:
UserInfo user=new UserInfo(); InputThread it=new InputThread(user); OutputThread ot=new OutputThread(user); it.start(); ot.start();
运行结果:
注意:数据发生错乱,造成线程安全问题
解决线程安全问题
解决线程安全问题:在出现线程安全的代码块上加synchronized关键字
输入线程加上synchronized
public class InputThread extends Thread{ private UserInfo user; //构造函数 public InputThread (UserInfo user){ this.user=user; } @Override public void run() { int count=0; while (true){ //解决线程不安全问题,在出现线程安全的代码块上加synchronized关键字 synchronized (user) { if(count==1){ user.userName="大圣"; user.userSex="男"; }else{ user.userName="小红"; user.userSex="女"; } count=(count+1)%2; } } }
输出线程资源加上synchronized
public class OutputThread extends Thread{ private UserInfo user;// //构造函数 public OutputThread(UserInfo user){ this.user=user; } @Override public void run() { while (true) { //解决线程不安全问题,在出现线程安全的代码块上加synchronized关键字 synchronized (user) { System.out.println("userName:"+user.userName+"----userSex:"+user.userSex); } } }}
运行结果:
可以看到,没有出现信息错乱的情况了!
阅读全文
0 0
- (三)多线程之间实现通讯
- 多线程之间实现通讯
- qt 多线程之间通讯
- Qt多线程之间通讯
- VC++ 多线程之间的通讯
- 【Java多线程】多线程之间实现通讯与生产者与消费者模式
- ios多线程操作(三)—— 线程通讯
- ios多线程操作(三)—— 线程通讯
- 简单的多线程之间的通讯
- 对于多线程之间的通讯的理解
- 多线程通讯之Handler实现
- Android Bundle类(实现两个activity之间的通讯)
- javascript与applet之间通讯三
- (二)多线程之间实现同步
- 多线程之间实现同步
- 多线程之间实现
- 多线程编程之三 线程间通讯
- VC中利用多线程技术实现线程之间的通信(三)---线程之间的同步
- 机器学习算法中不得不知的欠拟合与过拟合问题
- 计算jieba分词的Tf-idf值
- ref 的使用。
- Kotlin学习笔记
- 判断是否输出*号
- (三)多线程之间实现通讯
- Qt Creator快捷键
- ActiveMQ入门
- 习题4.6
- Hive UDTF开发指南
- tensorflow学习——简单RNN实现
- 高数 08.01 微分方程的基本概念
- 企业宣传小程序源码,企业宣传型小程序模板
- 面试智力题实例(二)