JAVA多线程(三个猴子分桃)操作,为什么总是出现一个线程,求大神!

public class ThreadDemo {

int mutex = 100;
boolean isRun = true;

int i = 0;

public static void main(String[] args) {

    Monkey m = new ThreadDemo().new Monkey();
    new Thread(m, "1").start();
    new Thread(m, "2").start();
    new Thread(m, "3").start();
}

class Monkey implements Runnable {

    @Override
    public  void run() {

        getTao();

    }

    public  void getTao() {

        while (isRun) {

            if (mutex % 2 == 0&&mutex!=0) {
                i = mutex;
                mutex = mutex / 2;
                System.out.println(Thread.currentThread().getName() + "de"
                        + mutex);
                mutex = i - mutex;
            } else if (mutex % 2 != 0) {
                i = mutex;
                mutex = mutex / 2 + 1;
                System.out.println(Thread.currentThread().getName() + "de"
                        + mutex);
                mutex = i - mutex;
            } else if (mutex == 0) {

                isRun = false;

            }
        }
    }
}

}

2个回答

你m只有一个实例!
通常new Thread(new ...)都是每个线程单独创建一个实例的。

Tiger_Zhao
Tiger_Zhao 回复qq_28076861: 应该是while循环内部这一整块加synchronized。
大约 5 年之前 回复
qq_28076861
qq_28076861 如果加了同步锁的话,synchronized 这个加在哪里呢?
大约 5 年之前 回复
qq_28076861
qq_28076861 好像不是因为这个问题。如果多运行几次的话,就会出现下面截图所有的效果。
大约 5 年之前 回复

你这个没有问题哦。我试了就是多线程的。

bulusli3
lhl_lqc 你new了三个线程,三个线程都会运行,这样写从逻辑上是没问题的
大约 5 年之前 回复
qq_28076861
qq_28076861 。。每次运行的不是只有一个线程吗??
大约 5 年之前 回复
Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
立即提问
相关内容推荐