毕向东讲解(摘)—11.多线程线程间通信(示例代码)
来源:互联网 发布:省市区json数据 2016 编辑:程序博客网 时间:2024/05/29 11:49
多线程的第一个演示,做一个简单的写入和读取的操作,分别在两个线程上完成:分别使用Input和Output来完成。
首先我们定义一个Res类(resource)存放基本信息的类:我们后面需要使用到的姓名和性别的属性。
然后定义一个Input类实现Runnable接口,用来进行性别和姓名写入的操作,定义一个计数器x,如果x为奇数和偶数的情况写入的数据不同。
定义一个Output类实现Runnable接口,用来输出打印当前资源类中的姓名和性别。
特别注意的是我们为了保证两个类(Input、Output)中的资源类对象一致,首先在Input和Output中声明资源类对象,再使用构造函数传入对象的方法(当然我们也可以使用单例来实现)
然后定义一个主函数测试类Test进行测试。
package day7;
/**
* 多线程,线程间通信示例代码
*
* @authormzy
*
*/
publicclassTest{
publicstaticvoidmain(String[]args){
Resr=newRes();
Inputi=newInput(r);
Outputo=newOutput(r);
Threadt1=newThread(i);
Threadt2=newThread(o);
t1.start();
t2.start();
}
}
classRes{
Stringname;
Stringsex;
}
classInputimplements Runnable{
Resr;
Input(Resr){
this.r=r;
}
publicvoidrun(){
intx=0;
while(true){
if(x==0){
r.name="王二";
r.sex="男";
}else{
r.name="rose";
r.sex="woman";
}
x=(x+1)%2;
}
}
}
class Outputimplements Runnable{
Resr;
Output(Resr){
this.r=r;
}
publicvoidrun(){
while(true){
System.out.println(r.name+"..."+r.sex);
}
}
}
从代码我们可以看出在Input线程中我们是英文对应英文进行写入,中文对应中文进行的写入;但是后面我们的输出结果中,出现了英文和中文对应输出的结果,可以看出这里出现了线程不安全的问题。
- 毕向东讲解(摘)—11.多线程线程间通信(示例代码)
- 毕向东讲解(摘)—5.多线程的安全问题(同步代码块)
- 毕向东讲解(摘)—10.多线程(死锁)
- 毕向东讲解(摘)—1.多线程概述
- 毕向东讲解(摘)—线程售票重复bug
- 多线程五,线程间通信,wait、notify,notifyAll方法(14,毕向东老师)
- 多线程五,线程间通信2,wait、notify,notifyAll方法(14,毕向东老师)
- 毕向东讲解(摘)—6.多线程安全问题(同步函数)
- 毕向东讲解(摘)—7.多线程安全问题(同步函数的锁this验证)
- 多线程五,线程间通信3,wait、notify,notifyAll方法,生产者和消费者问题(14,毕向东老师)
- 毕向东讲解(摘)—8.静态同步函数
- 毕向东讲解(摘)—9.单例设计模式的回顾
- 23-多线程(线程间通信-示例)
- JavaSE 多线程 线程间通信示例-1
- 多线程一(毕向东老师)
- 多线程(线程通信)
- java多线程-线程间通信-示例代码-解决安全问题-等待唤醒机制wait()notify()notifyAll()
- 毕向东JAVA视频讲解笔记(前三课)
- 微信小程序媒体组件(三)video
- 本地开发,服务器无法访问本地文件
- supervisor安装与使用入门
- CSS3连续动画实现的思路【演示DEMO】
- 频繁项集实际应用之分类到分类的交叉推荐
- 毕向东讲解(摘)—11.多线程线程间通信(示例代码)
- linux因为系统损坏无法进入系统解决
- 中断嵌套
- Spring注解标签 @Autowired @Qualifier
- html中遇到的坑
- Java反射机制可恶问题NoSuchFieldException
- oracle之 Oracle LOB 详解
- linux命令--grep详解
- JSP中的注释注意事项