synchronized是用来解决多线程情况下的线程安全问题的,它可以修饰方法也可以修饰语句块 ,

 方法内的变量是线程安全的 , 类的实例变量是非线程安全的 

首先来看一个非线程安全的例子

public class HasSefPrivateNum {
    private int num;
    public void addNum(String userName) throws InterruptedException{
        if("a".equals(userName)){
            num=100;
            System.out.println("a set over");
            Thread.sleep(2000);
        } else {
            num = 200;
            System.out.println("b set over");
        }
        System.out.println("num="+num);
    }
}

public class ThreadA extends Thread {
    private HasSefPrivateNum numRef;
    public ThreadA(HasSefPrivateNum numRef) {
        this.numRef = numRef;
    }

    @Override
    public void run() {
        super.run();
        try {
            numRef.addNum("a");
        } catch (InterruptedException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
    }
}

public class ThreadB extends Thread {
    private HasSefPrivateNum numRef;
    public ThreadB(HasSefPrivateNum numRef) {
        this.numRef = numRef;
    }

    @Override
    public void run() {
        super.run();
        try {
            numRef.addNum("b");
        } catch (InterruptedException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
    }
}

public class Main {
    public static void main(String[] args) {
        HasSefPrivateNum numRef = new HasSefPrivateNum();
        ThreadA t1 = new ThreadA(numRef);
        t1.start();
        ThreadB t2 = new ThreadB(numRef);
        t2.start();
    }
}
View Code

相关文章:

  • 2022-12-23
  • 2022-01-29
  • 2022-12-23
  • 2022-12-23
  • 2021-12-16
  • 2021-09-21
  • 2021-04-05
猜你喜欢
  • 2021-11-03
  • 2021-05-23
  • 2021-08-30
  • 2022-12-23
  • 2022-12-23
  • 2022-12-23
  • 2022-12-23
相关资源
相似解决方案