KeleQAQ 2020-09-28 17:22 采纳率: 0%
浏览 66

线程A加1,线程B减1,为什么a都是输出0?

 * 存在实例变量a=0
 * 线程A对a加1
 * 线程B对a减1
 * 
 * 求最终a的值

 */


为什么没有出现输出1   0之类的结果。比如线程A先判断,然后加1并输出a=1,线程B后判断(此时a=1),对a减1,输出a=0。

然后可不可以是 1   -1

<br>



```/*
 * 存在实例变量a=0
 * 线程A对a加1
 * 线程B对a减1
 * 
 * 求最终a的值

 */

class ThreadCalculate implements Runnable {
    private int a = 0;

    @Override
    public void run() {
        method1();
    }


    public void method1() {
        if (Thread.currentThread().getName().equals("A")) {
            a += 1;

        } else if (Thread.currentThread().getName().equals("B")) {

            a -= 1;

        } else {
            System.out.println(Thread.currentThread().getName());
        }

        System.out.println("最终 a=" + a);
    }

}

public class 线程同步案例 {

    public static void main(String[] args) {
        ThreadCalculate calculate = new ThreadCalculate();
        Thread t1 = new Thread(calculate, "A");
        Thread t2 = new Thread(calculate, "B");
        t1.start();
        t2.start();
    }

}

输出结果:
最终 a=0
最终 a=0

  • 写回答

2条回答 默认 最新

  • zqbnqsdsmd 2020-09-29 13:10
    关注
    评论

报告相同问题?

悬赏问题

  • ¥15 石墨烯磁表面等离子体
  • ¥15 angular 项目无法启动
  • ¥15 安装wampserver,图标绿色,但是无法进入软件
  • ¥15 C++ MFC 标准库 加密解密解惑
  • ¥15 两条数据合并成一条数据
  • ¥15 Ubuntu虚拟机设置
  • ¥15 comsol三维模型中磁场为什么没有“速度(洛伦兹项)”这一选项
  • ¥15 electron 如何实现自定义安装界面
  • ¥15 关于#linux#的问题:子进程C运行“ls –l”命令,且显示“C运行ls-l命令”(语言-c语言)
  • ¥15 vs code配置c语言遇到这个问题