文档章节

Java基础【Java的容器的线程安全问题】

止静
 止静
发布于 2014/08/18 11:12
字数 339
阅读 94
收藏 1


 线程安全: 多个线程在操作共享的资源,比如说我们的容器的时候。互相之间会带来意想

不到的的影响。


在jdk之中,有一些容器是线程安全的,有一些容器则不是。利用如下的方法:


private satic List<Task> taskQueue = Collections.SynchronizedList(new LinkedList<Task>()); 的方法,可以得到

本身状态不是线程安全的容器的线程安全的状态,当是要注意,如果我们紧紧只是在使用原子类型的操作

比如 : queue.poll(obj); 那么我们在Conllections.SynchronziedList方法中调用后,poll将处于同步状态。对于lingwai的

一些操作:非同步类的操作,好比如下。

    if(! queue.isEmpty())
    {    
        queue.poll(obj);
    }

   在这里我们很难保证,在调用了isEmpty()以后,在poll之间,这个queue队列有没有别修改

,所以对于这种情况,我们还是需要自己去同步

    synchronized(queue) {  
       if(!queue.isEmpty()) {  
           queue.poll(obj);  
       }  
   }


对于Collections.synchronizedList(new LinkedList<Task>()),

在返回的列表上进行迭代时,用户必须手工在返回的列表上进行同步:

List list = Collections.synchronizedList(new ArrayList()); 

... synchronized(list) 
{ Iterator i = list.iterator(); 
// Must be in synchronized block while (i.hasNext()) foo(i.next()); }

不遵从此建议将导致无法确定的行为。这里针对的是iterator;



© 著作权归作者所有

止静
粉丝 121
博文 134
码字总数 125762
作品 0
东城
技术主管
私信 提问
Spring的事务管理难点剖析(4):多线程的困惑

由于Spring的事务管理器是通过线程相关的ThreadLocal来保存数据访问基础设施(也即Connection实例),再结合IoC和AOP实现高级声明式事务的功能,所以Spring的事务天然地和线程有着千丝万缕的...

icheer
2012/07/17
206
0
ThreadLocal 基础知识

ThreadLocal是什么 · 早在JDK 1.2的版本中就提供java.lang.ThreadLocal,ThreadLocal为解决多线程程序的并发问题提供了一种新的思路。使用这个工具类可以很简洁地编写出优美的多线程程序。 ...

向阳而生
2015/11/21
224
0
读书笔记之《Java并发编程的艺术》-并发编程容器和框架(重要)

读书笔记部分内容来源书出版书,版权归本书作者,如有错误,请指正。 欢迎star、fork,读书笔记系列会同步更新 git https://github.com/xuminwlt/j360-jdk module j360-jdk-thread/me.j360....

Hi徐敏
2015/11/11
723
1
JAVA线程8 - ThreadLocal

一、ThreadLocal简介 ThreadLocal并不是一个Thread,而是Thread的局部变量。 当使用ThreadLocal维护变量时,ThreadLocal为每个使用该变量的线程提供独立的变量副本,所以每一个线程都可以独立...

小米米儿小
2014/02/26
713
0
读书笔记之《Java并发编程的艺术》-并发编程基础

读书笔记部分内容来源书出版书,版权归本书作者,如有错误,请指正。 欢迎star、fork,读书笔记系列会同步更新 git https://github.com/xuminwlt/j360-jdk module j360-jdk-thread/me.j360....

Hi徐敏
2015/11/11
4K
8

没有更多内容

加载失败,请刷新页面

加载更多

一起来学Java8(三)——方法引用

在一起来学Java8(一)——函数式编程中有一个简单的函数式编程的例子: import java.util.function.Consumer;class Person { public static void sayHello(String name) { S...

猿敲月下码
10分钟前
4
0
读书笔记:深入理解ES6(十一)

第十一章 Promise与异步编程   Promise可以实现其他语言中类似Future和Deferred一样的功能,是另一种异步编程的选择,它既可以像事件和回调函数一样指定稍后执行的代码,也可以明确指示代码...

张森ZS
34分钟前
9
0
面试官,Java8 JVM内存结构变了,永久代到元空间

在文章《JVM之内存结构详解》中我们描述了Java7以前的JVM内存结构,但在Java8和以后版本中JVM的内存结构慢慢发生了变化。作为面试官如果你还不知道,那么面试过程中是不是有些露怯?作为面试...

程序新视界
41分钟前
25
0
Elasticsearch 实战(一) - 简介

官腔 Elasticsearch,分布式,高性能,高可用,可伸缩的搜索和分析系统 基本等于没说,咱们慢慢看 1 概述 百度:我们比如说想找寻任何的信息的时候,就会上百度去搜索一下,比如说找一部自己喜...

JavaEdge
46分钟前
18
0
【jQuery基础学习】11 jQuery性能简单优化

本文转载于:专业的前端网站➦【jQuery基础学习】11 jQuery性能简单优化 关于性能优化 合适的选择器 $("#id")会直接调用底层方法,所以这是最快的。如果这样不能直接找到,也可以用find方法继...

前端老手
55分钟前
18
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部