代码如下:

public class Demo01 {
    public static void main(String[] args) {
        Demo01Service service = new Demo01Service();
        Thread t1 = new Demo01ThreadA(service);
        t1.start();
        Thread t2 = new Demo01ThreadB(service);
        t2.start();
    }
}

class Demo01Service{
    public void add(String userName)  {
         int num=0;
         if(Objects.equals("a",userName)){
              num=100;
             System.out.println("a set over");
             //睡眠2s,等待另一个线程修改num的值
             try {
                 Thread.sleep(2000);
             } catch (InterruptedException e) {
                 e.printStackTrace();
             }
         }
         else {
             num=200;
             System.out.println("b set over");
         }
        System.out.println("userName="+userName+","+"num="+num);
    }
}

class Demo01ThreadA extends Thread{
    private Demo01Service service;
    public Demo01ThreadA(Demo01Service service){
        this.service=service;
    }


    @Override
    public void run() {
      service.add("a");
    }
}

class Demo01ThreadB extends Thread{
    private Demo01Service service;
    public Demo01ThreadB(Demo01Service service){
        this.service=service;
    }

    @Override
    public void run() {
        service.add("b");
    }
}

运行结果:
图片说明
看出在线程B中改变了num的值,但不会影响A线程中num的值。说明局部变量是线程安全的。