有关多线程的一些问题

课上所学多线程部分出现的问题

下面是一段上课时ppt上的线程

public class Test {
    public static  int x = 1;
    public static void main(String[] args) {
        Thread thread1 = new Thread(new Runnable() {
            @Override
            public void run() {
                x *= 2;
                x *= 3;
                System.out.println("thread_1:x = "+x);
            }
        });

        Thread thread2 = new Thread(new Runnable() {
            @Override
            public void run() {
                x *= 5;
                System.out.println("thread_2:x = "+x);
            }
        });
        thread1.start();
        thread2.start();
        System.out.println("thread_main:x = "+x);
    }
}

控制台输出如下
控制台输出
在这里插入图片描述
在这里插入图片描述
可以发现每一次执行都会得到不同的结果
这样由于这种机制会给程序带来很大的不确定性很可能造成很大的bug
所以可以考虑调用其他方法来使得固定某些语句不让他被时间分片切分开
这里可以用join方法,让其他线程等待当前线程完成之后再继续进行

public class Test {
    public static  int x = 1;
    public static void main(String[] args) throws InterruptedException {
        Thread thread1 = new Thread(new Runnable() {
            @Override
            public void run() {
                x *= 2;
                x *= 3;
                System.out.println("thread_1:x = "+x);
            }
        });

        Thread thread2 = new Thread(new Runnable() {
            @Override
            public void run() {
                x *= 5;
                System.out.println("thread_2:x = "+x);
            }
        });
        thread1.start();
        thread1.join();
        thread2.start();
        thread2.join();
        System.out.println("thread_main:x = "+x);
    }
}

在这里插入图片描述
可以看出这样改过之后执行顺序就已经确定好了。

展开阅读全文

没有更多推荐了,返回首页

©️2019 CSDN 皮肤主题: 1024 设计师: 上身试试
应支付0元
点击重新获取
扫码支付

支付成功即可阅读