看了线程的很多例子 可就是不会写 能不能给一个多个线程访问一个MAP的例子,并且其中一个线程对MAP修改

 我来答
miaoch
2016-12-28 · TA获得超过1204个赞
知道小有建树答主
回答量:814
采纳率:83%
帮助的人:341万
展开全部
import java.util.HashMap;
import java.util.Map;

public class TestMain {
static int index;
public static void main(String[] args) {
final Map<Integer, Integer> map = new HashMap<>();
for (int i=0;i<10;i++) {
new Thread(new Runnable() {
@Override
public void run() {
map.put(index++, index);
while (true) {
//不让线程结束
System.out.println(map);
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
}).start();
}
    } 
}
追问
我想问一下不都说hashTale 是安全的 hashMap是不安全的么 

比如说10个线程访问hashTable 其中一个修改 按道理hashTable不应该修改不了么
然后hashMap可以修改并且可能出错麽
追答
安全不安全是这个类是否会给线程上锁。hashmap貌似没有,所以就可能导致2个线程获得数据的时候 是相同的,而修改该数据 比如自增 导致虽然两个map都做了自增操作,但是就只有一次的效果。

hashtable是会给线程上锁的,查查Synchronize这个关键字。当两个线程同时要请求该关键字声明的方法,该对象就会让这两个线程 进入锁池,然后选择一个执行,等一个执行完成后,另外一个线程才能再执行。所以是线程安全的
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式