Java线程同时运行吗

问题描述:

img

img

img
怎么会有两个二的,是同时运行吗还是?

是的,多个线程同时执行,出现两个二是因为线程资源共享导致的问题。
由于多线程对同一资源共享抢占,导致会出现线程不安全,也就是多个线程消费到同一个资源。解决线程安全需要用到同步锁。
如有帮助,望点击【本回答采纳】按钮支持一下。

这是典型的多个线程操作同一份资源,导致线程不安全,造成数据混乱。可以使用“加锁”的方法解决,Lock锁、Synchronized锁都可以解决

这是典型的多线程并发问题,可以用加锁处理就好了

  1. 不深入考虑细节的话,线程可以认为是同时运行的
  2. 把线程执行代码的过程分解成两个步骤,
    a. 执行i++
    b. 输出i
  3. 如果是某个线程执行完a,b步骤,另一个线程再执行a,b步骤,那么就不会有重复。实际上可能执行顺序如下
    假如i是0
    线程一执行步骤a,i变1
    线程二执行步骤a, i变2
    线程一执行步骤b,输出2
    线程二执行步骤b,输出2
    以上就是产生重复的原因,实际上两个线程一,线程二可以以任意顺序执行a,b步骤,这就是多线程并发带来的典型问题。
  4. 多执行几次,或者加大循环次数,就可以看到重复输出是随机的,