本帖最后由 庄星睿 于 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的值永远都不会变的,呵呵
|
|