首页 > 编程知识 正文

java hashmap(java线程通信)

时间:2023-05-06 01:08:43 阅读:95819 作者:4287

首先,什么是线程不安全?线程安全是指当多线程访问时,采用锁定机制。当一个线程访问这个类的某些数据时,它是受保护的,在线程读完之前,其他线程不能访问它,其他线程也不能使用它。不会出现数据不一致或数据污染。线程不安全意味着不提供数据访问保护。有可能多个线程一个接一个地更改数据,导致数据变脏。如图所示,List接口下有两个实现,一个是ArrayList,一个是vector。从源码来看,因为Vector的方法前面有关键字“synchronized”,也就是同步的意思,所以sun公司希望Vector是线程安全的,而arraylist是高效的。缺点是另一个优点。以下原则(百度的,容易理解):数组列表在添加元素时,可能有两个步骤要完成:

1.将此元素存储在项目[大小]的位置;

2.增加“大小”的值。

在单线程运行的情况下,如果Size=0,在添加一个元素后,这个元素在位置0,Size=1;

如果有两个线程,例如,在多线程的情况下,线程A首先将元素存储在位置0。但是在这个时候,CPU调度线程A暂停,线程B得到运行的机会。线程B也向这个ArrayList添加元素,因为此时Size仍然等于0(注意,我们假设添加一个元素需要两步,线程A只完成了第1步),所以线程B也将元素存储在位置0。然后线程A和线程B继续运行,增加大小的值。

现在让我们看看数组列表。实际上只有一个元素,存储在位置0,但是大小等于2。这就是“线程不安全”。

示例程序:

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。