修改同步方法后,所有Java线程都会看到共享资源更新吗?

RTF

Collections如果对数据结构对的所有访问都始终与获取和释放锁包装在一起(特别是使用静态同步方法进行任何修改),是否有必要使用Java数据结构的专用并发版本(例如,CopyOnWriteArrayList与ArrayList)数据结构)。例如:

public static synchronized Item doIt() {
    // remove something from data structure 1
    // add the removed item to data structure 2
    // return removed item
}

我知道同步方法一次只能执行一个线程来执行更新,但是到某个线程退出该方法时,其他线程是否可以保证看到更新的数据结构,还是我仍然需要专门的并发数据结构来执行那保证?

编辑:

这是我尝试做的一个更好的例子:

private static final List<Item> A;
private static final HashMap<Integer,Item> B;

public static Item doSomething() {
    // some stuff ...
    Item item = doIt();
    // some other stuff ...
    return item;
}

private static synchronized Item doIt() {
    Item theItem = A.remove( A.size()-1 );
    B.put( theItem.getId(), theItem );
    return theItem;
}
西蒙·莱曼(Simon Lehmann)

,如果访问总是包装在同步的方法/块中。

这是因为,synchronized在同步的方法/块(在同一对象上)之间建立了事前关系。在Java教程中引用同步方法

其次,当同步方法退出时,它会与随后对同一对象的同步方法的任何调用自动建立先发生关系。保证了对象状态的更改对所有线程都是可见的

但是,将所有访问真正包装在同步块中非常重要。例如,如果您要从像这样的同步方法中返回对列表的引用

public synchronized List<Object> GetList() {
    return this.myList;
}

并在同步方法之外使用列表,您将无法获得保证!

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

修改同步方法后,所有Java线程都会看到共享资源更新吗?

来自分类Dev

共享资源的基于锁的同步方法中的所有权是什么意思?

来自分类Dev

Apache Beam:在实例中的所有线程之间共享资源

来自分类Dev

在多线程程序中更新共享资源

来自分类Dev

Java 并发 API 锁与共享资源上的同步

来自分类Dev

具有共享资源的多线程服务器

来自分类Dev

优化对共享资源的访问同步

来自分类Dev

将线程同步责任转移到共享资源中

来自分类Dev

使用共享资源创建多个线程

来自分类Dev

线程:共享资源特殊情况

来自分类Dev

单例类的方法是否是线程安全的,方法内部是否使用了共享资源?

来自分类Dev

在C#中同步共享资源的集合

来自分类Dev

在C#中同步共享资源的集合

来自分类Dev

首选:在访问共享资源时挂起所有任务或互斥锁?[freeRTOS]

来自分类Dev

如何与多个线程共享资源(串行端口)

来自分类Dev

在线程之间共享资源(文件,互斥体)

来自分类Dev

了解多线程共享资源:shmid、shmat、shmdt

来自分类Dev

在 Huey 中使用线程管理共享资源

来自分类Dev

对象的共享资源

来自分类Dev

从所有线程更新共享变量

来自分类Dev

在Java中的源代码和测试之间共享资源的推荐方法是什么?

来自分类Dev

具有多租户和共享资源的RESTful API

来自分类Dev

基本控制器或访问共享资源的方法

来自分类Dev

Java:将创建对象的访问权限授予共享资源

来自分类Dev

Java共享资源存储到错误的路径

来自分类Dev

Java共享资源存储到错误的路径

来自分类Dev

在项目之间共享资源

来自分类Dev

Docker如何共享资源

来自分类Dev

@Synchronized似乎无法同步访问共享资源以进行对Spring Webserver的异步调用

Related 相关文章

  1. 1

    修改同步方法后,所有Java线程都会看到共享资源更新吗?

  2. 2

    共享资源的基于锁的同步方法中的所有权是什么意思?

  3. 3

    Apache Beam:在实例中的所有线程之间共享资源

  4. 4

    在多线程程序中更新共享资源

  5. 5

    Java 并发 API 锁与共享资源上的同步

  6. 6

    具有共享资源的多线程服务器

  7. 7

    优化对共享资源的访问同步

  8. 8

    将线程同步责任转移到共享资源中

  9. 9

    使用共享资源创建多个线程

  10. 10

    线程:共享资源特殊情况

  11. 11

    单例类的方法是否是线程安全的,方法内部是否使用了共享资源?

  12. 12

    在C#中同步共享资源的集合

  13. 13

    在C#中同步共享资源的集合

  14. 14

    首选:在访问共享资源时挂起所有任务或互斥锁?[freeRTOS]

  15. 15

    如何与多个线程共享资源(串行端口)

  16. 16

    在线程之间共享资源(文件,互斥体)

  17. 17

    了解多线程共享资源:shmid、shmat、shmdt

  18. 18

    在 Huey 中使用线程管理共享资源

  19. 19

    对象的共享资源

  20. 20

    从所有线程更新共享变量

  21. 21

    在Java中的源代码和测试之间共享资源的推荐方法是什么?

  22. 22

    具有多租户和共享资源的RESTful API

  23. 23

    基本控制器或访问共享资源的方法

  24. 24

    Java:将创建对象的访问权限授予共享资源

  25. 25

    Java共享资源存储到错误的路径

  26. 26

    Java共享资源存储到错误的路径

  27. 27

    在项目之间共享资源

  28. 28

    Docker如何共享资源

  29. 29

    @Synchronized似乎无法同步访问共享资源以进行对Spring Webserver的异步调用

热门标签

归档