前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >java中同步synchronized的意义,如何用它解决线程不安全的问题

java中同步synchronized的意义,如何用它解决线程不安全的问题

作者头像
马克java社区
修改2021-04-23 10:48:02
2980
修改2021-04-23 10:48:02
举报
文章被收录于专栏:java大数据

从上节我们学到,当多个线程访问且更改同一个变量 时,很容易出现线程安全问题,诚然,我们可以通过一些其他手段,比如局部变量,多个实例,调整程序结构来解决线程安全问题,但是通常来讲,通过同步机制 synchronized来解决线程安全问题更加确定。比如,由于需求等其他限制条件决定,我们不能够用局部变量或多个实例或什么其他办法解决怎么办? synchronized为我们提供了比较确定的方法。换句话说,线程安全问题, synchronized基本能解决。分析上一节的线程安全问题,我们发现问题的起因主要是两个线程同时访问更改共同的变量造成的,只要我们让能够更改共 同变量的方法序列的执行,(换句话就是一个执行完后,另一个再执行,) 就没问题了。如何实现呢? 用synchronized, 现在针对上一节有问题的例子:1.8.1_b,我们只加一个字synchronized, 问题就解决了,

例1.9.1

class Photoshop {

    private Photoshop() {

    }

    private static Photoshop photoshop = null;

    public synchronized static Photoshop getInstanceQixy() {

        if (photoshop == null) {

            photoshop = new Photoshop();

        }

        return photoshop;

    }

}

class MyThreadMark_to_win extends Thread {

    public void run() {

        Photoshop photoshopI1 = Photoshop.getInstanceQixy();

        System.out.println(Thread.currentThread().getName() + "实例是 "

                + photoshopI1);

    }

}

public class Test {

    public static void main(String[] args) {

        MyThreadMark_to_win mt1 = new MyThreadMark_to_win();

        MyThreadMark_to_win mt2 = new MyThreadMark_to_win();

        mt1.start();

        mt2.start();

    }

}

更多请见:https://blog.csdn.net/qq_44639795/article/details/103087895

本文系转载,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文系转载前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档