开发者社区> 问答> 正文

如何理解java中的某些方法不能同步访问

如何理解java中的某些方法不是线程安全的(不能同步访问)。能同步访问的方法有哪些,如何判断一个方法能不能同步访问?

展开
收起
蛮大人123 2016-05-26 17:52:49 2266 0
2 条回答
写回答
取消 提交回答
  • 通常这个问题都是数据竞争问题,某些方法由于变更对象的共享数据,并发访问这类方法时数据可能会产生异常,所以需要使用锁。
    2019-07-17 19:16:43
    赞同 展开评论 打赏
  • 我说我不帅他们就打我,还说我虚伪

    不是线程安全的(不能同步访问)
    你说反了。不是线程安全的才需要同步访问。同步访问的意思就是串行执行,等前面执行完了,再执行后面的。
    线程不安全的场合很多,比如像操作系统中的用户界面、打印机等外设、控制台输出,都不允许并发(设想两个程序同时要输出文字到同一个屏幕,那还不乱套了)
    在代码中,每个线程有自己的堆栈但是共享整个堆,所以访问那些全局的变量,也必须同步,否则会出现脏读数据。
    同步也不是万能的良药。不当的锁定会导致程序死锁,而且多线程本身就是为了提高性能,但是同步使用多了,程序又实质上退化成了单线程程序,用多线程的意义也就没了。

    2019-07-17 19:16:43
    赞同 展开评论 打赏
问答排行榜
最热
最新

相关电子书

更多
Spring Cloud Alibaba - 重新定义 Java Cloud-Native 立即下载
The Reactive Cloud Native Arch 立即下载
JAVA开发手册1.5.0 立即下载