美文网首页
一招叫你看懂java - synchronized

一招叫你看懂java - synchronized

作者: 晖仔Milo | 来源:发表于2022-01-24 14:43 被阅读0次

    背景

    现在可以多个线程对同一片存储空间进行访问,这时存储空间里面的数据叫做共享数据。线程并发给我们带来效率的同时,也带了一些数据安全性的问题,数据安全性是一个很严重的问题,多个线程同时访问同一片数据区,很有可能把里面的数据弄的混乱。 所以Java语言提供了专门机制以解决这种数据安全性问题,有效避免了同一个数据对象被多个线程同时访问,从而导致数据的错乱的问题。

    synchronized关键字用法

    synchronized关键字可以作为函数的修饰符(也就是常说的同步方法)
    synchronized关键字可以作为函数内的语句(也就是常说的同步代码块)

    public class AsyncTest {
    
        public void startTest(){
            new Thread(new Runnable() {
                @Override
                public void run() {
                    int count = 0;
                    while (count++<10){
                        printX("A", count);
                    }
                }
            }).start();
    
            new Thread(new Runnable() {
                @Override
                public void run() {
                    int count = 100;
                    while (count++<110){
                        printX("B", count);
                    }
                }
            }).start();
        }
    
        private synchronized void printX(String flag, int x){
            System.out.println(flag + " : x == " + x);
            try {
                Thread.sleep(1000);
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
        }
    
    }
    

    使用 synchronized 关键字,每次得到的结果都是不同的,而且耗时也达到了20s


    image.png
    image.png

    而去掉 synchronized 关键字的运行结果是固定的,如下,而且耗时也固定为10s


    image.png

    怎么样,你悟到了没有?

    相关文章

      网友评论

          本文标题:一招叫你看懂java - synchronized

          本文链接:https://www.haomeiwen.com/subject/qhubhrtx.html