(三)多线程之间实现通讯
2017-12-13 11:32
429 查看
多线程之间实现通讯
多线程之间如何实现通讯
什么是多线程之间通讯?
多线程之间通讯,其实就是多个线程在操作同一个资源,但是操作的动作不同。多线程之间通讯需求
案例:第一个线程写入(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); } } } }
运行结果:
可以看到,没有出现信息错乱的情况了!
相关文章推荐
- 【Java多线程】多线程之间实现通讯与生产者与消费者模式
- 多线程之间实现通讯
- 线程开发之多线程之间的通讯实现
- 多线程之间实现通讯
- 多线程之间实现通讯,join,yield,lock
- 线程开发之多线程之间的通讯实现
- Java中有两种实现多线程的方式以及两种方式之间的区别
- 多线程之间实现同步
- java多线程有几种实现方法?线程之间如何同步
- 多线程之间变量锁的实现
- java多线程实现服务器端与多客户端之间的通信
- 利用多线程和TCP技术,实现客户端与服务端之间的通信
- C#.NET通过Socket实现平行主机之间网络通讯(含图片传输的Demo演示)
- c# 进程间同步实现 进程之间通讯的几种方法
- 基于TCP协议的Socket通讯,实现多线程简单登录
- C#基于委托实现多线程之间操作的方法
- 线程共享的环境包括:进程代码段、进程的公有数据(利用这些共享的数据,线程很容易的实现相互之间的通讯)、进程打开的文件描述符、信号的处理器、进程的当前目录和进程用户ID与进程组ID。 进程拥有这
- c# 进程间同步实现 进程之间通讯的几种方法
- Android开发之实现两个手机之间的通讯
- Prism 框架中使用IEventAggregator事件聚合器简单实现ViewModel之间的通讯