看了线程的很多例子 可就是不会写 能不能给一个多个线程访问一个MAP的例子,并且其中一个线程对MAP修改
1个回答
展开全部
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这个关键字。当两个线程同时要请求该关键字声明的方法,该对象就会让这两个线程 进入锁池,然后选择一个执行,等一个执行完成后,另外一个线程才能再执行。所以是线程安全的
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询