黑马程序员技术交流社区
标题:
多线程控制切换 运算符问题
[打印本页]
作者:
庄星睿
时间:
2012-6-22 12:54
标题:
多线程控制切换 运算符问题
本帖最后由 庄星睿 于 2012-6-23 11:46 编辑
多线程这块想不通了,切换执行x=x++%2; 程序标注了
class Resource
{
String name;
String sex;
}
class Input implements Runnable
{
private Resource res;
Input(Resource res)
{
this.res=res;
}
public void run()
{
int x=0;
while(true)
{
if (x==0)
{
res.name="MIKE";
res.sex="man";
}
else
{
res.name="丽丽莉莉";
res.sex="女";
}
x=x++%2; //这里视频里说可以写成这样,但这样写,程序就失去了切换的功能了。可以执行试一下。
//x=++x%2; //下面这两种写法均没问题
//x=(x+1)%2; //这里是视频的写法
}
}
}
class Output implements Runnable
{
private Resource res;
Output(Resource res)
{
this.res=res;
}
public void run()
{
while(true)
{
System.out.println(Thread.currentThread().getName()+"...."+res.name+"...."+res.sex);
}
}
}
class InputOutputDemo
{
public static void main(String[] args)
{
Resource res=new Resource();
Input in=new Input(res);
Output out=new Output(res);
Thread t1=new Thread(in);
Thread t2=new Thread(out);
t1.start();
t2.start();
//System.out.println("Hello World!");
}
}
复制代码
int x=0;
while(true)
{
if(x==0)
{}
else
{}
x=x++%2;
}
这里x=x++%2应该和x=(x+1)%2 、x=++x%2都是一样的啊,++运算符的优先级不是高于 %吗?
赋值运算符=的优先级不是最后的吗?这里为什么不能实现呢?想不通了,求解?
就相当于这样
class Test
{
public static void main(String[] args)
{
int x=0;
while(true)
{
if (x==0)
{
System.out.println("true");
}
else
{
System.out.println("false");
}
x=(x++)%2; //加了括号也不行
//x=++x%2;
//x=(x+1)%2;
}
}
}
返回结果依然都是true
想通了,就好像x=x++,x的值永远都不会变的,呵呵
作者:
黑马刘洋
时间:
2012-6-22 12:56
28.x=(x++)%2;
作者:
庄星睿
时间:
2012-6-22 13:01
黑马刘洋 发表于 2012-6-22 12:56
28.x=(x++)%2;
试过了,实际上就这样
class Test
{
public static void main(String[] args)
{
int x=0;
while(true)
{
if (x==0)
{
System.out.println("true");
}
else
{
System.out.println("false");
}
x=(x++)%2;
//x=++x%2;
//x=(x+1)%2;
}
}
}
返回依然都是ture
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2