java list 线程安全_java linkedlist线程安全吗?是线程安全的吗?
你知道linkedlist是否是线程安全的吗?下面的文章内容,要给大家介绍的就是这个方面的问题,一起来详细的了解一下吧。
在java当中,linkedlist是线程不安全的。
延伸阅读:
在多线程当中,有多个线程访问linkedlist会出现什么问题?
1、在JDK代码当中,ListItr的add(), next(), previous(), remove(),
set()方法都会跑出ConcurrentModificationException。final void checkForComodification()
{
if (modCount != expectedModCount)
throw new ConcurrentModificationException();
}
在代码当中对linkedlist结构被修改的次数进行了记录。
在Iterator初始化的时候,任何通过Iterator修改LinkedList结构的行为,都会同时更新modCount以及expectedModCount和,使得着2个值相等。
通过LinkedList对象修改它的结构的方法只更新modCount。
所以,假如,有2个线程A和B。
A通过Iterator遍历,并且对linkedlist进行了修改,在这个时候,B通过对象修改其结构,那么Iterator的相关方法就会抛出异常。
这是比较容易发现的由线程竞争所造成的错误。
2、假如,2个线程都是通过LinkedList对象修改它的结构那么又会发生什么呢?package linkedlist;
import java.util.Iterator;
import java.util.LinkedList;
import java.util.concurrent.Executors;
public class Test {
private final LinkedList list = new LinkedList();
public Test() {
Thread add1 = new Thread(new Runnable() {
@Override
public void run() {
int number = 0;
while (true) {
if (number == 10)
number = 0;
// System.out.println("Writing " + number);
list.addFirst(number);
int first = list.getFirst();
if (first != number) {
System.err.println("ERROR!!! " + number + " " + first);
System.exit(-1);
}
number++;
System.out.flush();
try {
Thread.sleep(2);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
});
Thread add2 = new Thread(new Runnable() {
@Override
public void run() {
int number = 100;
while (true) {
if (number > 119) {
number = 100;
}
// System.out.println("Writing " + letter);
// System.out.flush();
list.addFirst(number);
int first = list.getFirst();
if (first != number) {
System.err.println("ERROR!!! " + number + " " + first);
System.exit(-1);
}
number++;
try {
Thread.sleep(2);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
});
Executors.newCachedThreadPool().execute(add1);
Executors.newCachedThreadPool().execute(add2);
// Executors.newCachedThreadPool().execute(read2);
}
/**
* @param args
*/
public static void main(String[] args) {
Test test = new Test();
}
}
程序输出:
ERROR!!! 0 100
总的来说,线程安全问题是由多个线程同时写或者是同时读写同一个资源造成的。
java linkedlist是线程不安全的的哦。
你还想了解更多关于linkedlist方面的内容吗?请继续通过奇Q工具网的常见问题栏目来了解吧。更多java常见问题回答可以分享给你。
推荐阅读:
java list 线程安全_java linkedlist线程安全吗?是线程安全的吗?相关推荐
- java 主线程等待_Java实现主线程等待子线程
本文介绍两种主线程等待子线程的实现方式,以5个子线程来说明: 1.使用Thread的join()方法,join()方法会阻塞主线程继续向下执行. 2.使用Java.util.concurrent中的C ...
- java虚拟机线程数_Java虚拟机最多支持多少个线程?
作者:miracle1919 来源:http://sina.lt/getP McGovernTheory在StackOverflow提了这样一个问题:Java虚拟机最多支持多少个线程?跟虚拟机开发商 ...
- java多线程交替打印_java多线程 更优雅的实现线程同步:交替打印A、B LockSupport实现...
一 问题概述 线程或者进程之间有两种关系 同步和互斥,我们通常实现同步方法是使用线程的等待唤醒机制,而等待唤醒机制的使用是建立在互斥的继承上的.但是同步线程并不一定是必须要实现互斥的.比如一个线程打印 ...
- thread.sleep是让哪个线程休眠_java开发两年,这些线程知识你都不知道,你怎么涨薪?...
前言 什么是线程:程序中负责执行的哪个东东就叫做线程(执行路线,进程内部的执行序列),或者说是进程的子任务. Java中实现多线程有几种方法 继承Thread类: 实现Runnable接口: 实现Ca ...
- java暂停的方法_Java使用join方法暂停当前线程
目标线程的join方法暂停当前线程,直到目前线程完成(从run()方法返回),供大家参考,具体内容如下 Java代码: package Threads; import java.io.IOExcept ...
- java统计系统线程数_Java并发(八)计算线程池最佳线程数
目录 一.理论分析 二.实际应用 为了加快程序处理速度,我们会将问题分解成若干个并发执行的任务.并且创建线程池,将任务委派给线程池中的线程,以便使它们可以并发地执行.在高并发的情况下采用线程池,可以有 ...
- java 多线程使用线程池_Java多线程:如何开始使用线程
java 多线程使用线程池 什么是线程? (What is a Thread?) A thread is a lightweight process. Any process can have mul ...
- java 对象 线程安全_JAVA并发编程学习:构造线程安全的对象
设计线程安全的类 实例限制 当一个对象被另一个对象封装时,所有访问被被封装对象的代码路径就是全部可知的,这相比于让对象可被整个系统访问来说,更容易对代码路径进行分析.将数据封装在对象内部,把对数据的访 ...
- java timer指定线程池_Java 定时器(Timer)及线程池里使用定时器实例代码
java Timer定时器 简单实例代码:public class Test { public static void main(String[] args) { // Timer定时器 Timer ...
最新文章
- python 实现结构树模式显示目录下文件
- centos打显卡驱动命令_CentOS7显卡驱动问题
- SQLServer表内自关联级联删除
- 后台原理_从浏览器如何进入路由器后台【详细介绍】
- 标定中是什么意思_机械加工中,测头有什么作用呢?
- SAP CRM Fiori Opportunity应用功能一览
- Github CodeSpaces 使用及定制化
- ajax的访问 WebService 的方法
- Wannafly挑战赛18B 随机数
- “关起门来搞开源,做不了开源世界的Leader”
- docker强制删除none的image镜像
- 输入法快捷键导致功能软件功能失效
- 开源转场库HYBControllerTransitions
- SQL Server执行计划(2) - 如何查看执行计划
- 天猫魔盒android开发者模式,【当贝市场】天猫魔盒M16S开启远程调试模式教程
- 基于Matpower的电力系统潮流计算设计原理
- 阿里云新版云计算架构师ACE认证专家解读会重磅来袭
- 【压缩包打不开的原因和解决方法】
- html桌面共享文件夹,win7共享文件夹在哪? win7和win10怎么共享文件夹
- 第四章#4.3哈夫曼树以及案例介绍