Java数组同步
我有一种异步任务管理类,它有一个这样的数组:
public static int[][][] tasks; 大多数情况下,我访问这样的单元格: synchronized(tasks[A][B]) { // Doing something with tasks[A][B][0] } 我的问题是,如果我这样做: synchronized(tasks[A]) { // ... } 它还会阻止尝试进入同步的线程(任务[A] [B])吗? 解决方法
int [] [] []是一个整数数组数组,因此你的synchronized(tasks [A] [B])正在同步最低级别的对象,一个整数数组,阻止对同一个数组的其他同步访问.
另一方面,synchronized(任务[A])正在同步下一级别的对象 – 整数数组的数组.这可以防止对该数组的同步访问,这意味着,实际上任何其他使用synchronized(任务[A])的代码都将被阻止 – 这似乎就是你想要的,只要你对任务的所有访问同时进行同步水平. 请注意,同步不会锁定任何东西!但是,如果两个线程尝试在同一个对象上进行同步,则必须等待. 然后你处理另一个对象(你的整数数组)并不重要. 我担心我说andersoj的回答是误导性的.你正在做正确的事. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |