黑马程序员技术交流社区
标题:
多线程问题
[打印本页]
作者:
zhangshuai_123
时间:
2015-7-1 15:03
标题:
多线程问题
请问以下代码有何问题如何解决
public class TestDemo {
public static void main(String[] args) {
// TODO Auto-generated method stub
Resource r=new Resource();
Input in=new Input(r);
Output out=new Output(r);
Thread t1=new Thread(in);
Thread t2=new Thread(out);
t1.start();
t2.start();
}
}
//描述资源
class Resource{
String name;
String sex;
}
//赋值线程任务
class Input implements Runnable{
private Resource r;
Input(Resource r){//任务一初始化就必须有要处理的资源。
this.r=r;
}
public void run(){
int x=0;
while(true){
if(x==0){
r.name="张飞";
r.sex="男";
}else{
r.name="rose";
r.sex="name";
}
x=(x+1)%2;//实现切换
}
}
}
//获取值线程任务
class Output implements Runnable{
private Resource r;
Output(Resource r){
this.r=r;
}
public void run(){
while(true){
System.out.println(r.name+"....."+r.sex);
}
}
}
作者:
win_rainbow
时间:
2015-7-1 21:32
两个线程同时操作 Resource 实例,导致姓名和性别混乱,可以加入synchronized.
public class TestDemo {
public static void main(String[] args) {
// TODO Auto-generated method stub
Resource r=new Resource();
Input in=new Input(r);
Output out=new Output(r);
Thread t1=new Thread(in);
Thread t2=new Thread(out);
t1.start();
t2.start();
}
}
//描述资源
class Resource{
String name;
String sex;
public synchronized int set ( int x )
{
if(x==0)
{
this.name="张飞";
this.sex="男";
}
else
{
this.name="rose";
this.sex="name";
}
x=(x+1)%2;//实现切换
return x;
}
public synchronized void print ()
{
System.out.println(this.name+"....."+this.sex);
}
}
//赋值线程任务
class Input implements Runnable{
private Resource r;
Input(Resource r){//任务一初始化就必须有要处理的资源。
this.r=r;
}
public void run(){
int x = 0;
while(true)
{
x=r.set(x);
}
}
}
//获取值线程任务
class Output implements Runnable{
private Resource r;
Output(Resource r){
this.r=r;
}
public void run(){
while(true)
r.print();
}
}
复制代码
作者:
孙建强Jason
时间:
2015-7-1 21:41
还没有学到 帮不上忙了
作者:
等你的季节-夏天
时间:
2015-7-1 21:43
兄弟加油!!
作者:
samove
时间:
2015-7-1 22:00
哇,好厉害的样子,不过我也看不懂这代码,希望楼主早点找到答案。。。
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2