- 浏览: 1064043 次
- 性别:
- 来自: 南京
文章分类
- 全部博客 (501)
- dwr (6)
- javascript (84)
- oracle (66)
- jsp/servlet (18)
- ant (3)
- 基础知识 (12)
- EXT (10)
- My SQL (10)
- java (71)
- spring (37)
- 学习的对象 (2)
- Linux (24)
- 面试 (1)
- HTML/CSS (11)
- tomcat (11)
- 收藏夹 (2)
- Power Designer (2)
- struts.xml配置文件 (1)
- sturts2 (3)
- myeclipse (8)
- eclipse (7)
- Maven (34)
- SVN (3)
- SAP JCO (2)
- JBOSS (11)
- webservice (8)
- word (1)
- 敏捷开发 (1)
- sybase (4)
- Nexus (3)
- EhCache (3)
- log4j (3)
- Cookie (4)
- Session (4)
- CXF (7)
- AXIS (2)
- SSO (1)
- LDAP (1)
- velocity (2)
- Jquery (5)
- redis (2)
- http (4)
- dojo (1)
- Linux资源监控软件mnon的安装与运用 (1)
- notepad++ (1)
- EA (1)
- UML (1)
- JasperReports (1)
- 权限 (0)
- freemarker (4)
- Spring MVC (1)
- JMS (1)
- activeMQ (1)
- hession (3)
- 安全 (1)
- ibatis (2)
- log (1)
- nginx (1)
最新评论
-
winhbb:
我刚好遇到了一个问题(在可以依赖注入的场合有效):有两个模块A ...
解决Maven项目相互依赖/循环依赖/双向依赖的问题 -
nanjiwubing123:
long3ok 写道你好 XmlOutputFormatter ...
用XStream转换复杂XML -
zhoujianboy:
另外一个方法实现eclipse tomcat 热部署:http ...
eclipse下实现maven项目在tomcat容器热部署方法 -
long3ok:
你好 XmlOutputFormatter 请问这个类是在什么 ...
用XStream转换复杂XML -
ganbo:
总结的好,文章给力。
解决Maven项目相互依赖/循环依赖/双向依赖的问题
public class test { public static ConcurrentHashMap chm = new ConcurrentHashMap(); public static void main(String[] args) { for(int i=1;i<100;i++) { th t = new th(i); t.start(); } } } class th extends Thread { private int number = 0; public th(int _number) { number = _number; } @Override public void run() { boolean bo = true; while(bo){ int state = test.chm.get("test") == null ? 0 : (Integer)test.chm.get("test"); if(state == 9 ) { System.out.println("线程:"+number+",停止!"); bo = false ; }else { state = (int)(Math.random() * 100); test.chm.put("test", state); System.out.println("线程:"+number+",修改操作,状态="+state); } } } }
今天做了下测试,100个并发,通过ConcurrentHashMap 来存储数据来保证线程安全,
正确测试结果就是当一个线程随机数为9的时候,所有线程停止工作,但多执行几次还会发现,并发访问时,一个线程改变state为9,后其他线程还有继续在工作的.
线程:1,修改操作,状态=1
线程:2,修改操作,状态=9
线程:4,修改操作,状态=81
线程:6,停止!
线程:3,停止!
线程:8,停止!
线程:10,停止!
线程:7,停止!
检查了下 是多个线程执行到else里面时,state已经被之前的线程改为9了 ,造成的,说白了就是修改state=9这个线程在put之前,其他多个线程已经从map里读取stage的数据了,所以当state改成9,这些线程还可以执行else里面代码,并且将state又改成其他数了.
我可以通过同步代码块解决这问题,但就没有使用ConcurrentHashMap 的必须要了hashmap也可以做到.不知道是否我是ConcurrentHashMap 有问题?
ConcurrentHashMap 只是保证本身map的线程安全,不保证你自己写的程序的同步.
你可以采用客户端加锁实现同步
synchronized(test.chm)
转载地址:http://www.oschina.net/question/236000_71020
发表评论
-
个人草稿使用
2017-08-19 09:02 0深入理解JVM: http://www.cnblogs.co ... -
Thread.setDaemon详解
2015-04-24 21:31 902java中线程分为两种类型:用户线程和守护线程。通过Threa ... -
21,tomcat关闭钩子
2014-12-31 10:36 726在很多环境下,在关闭应用程序的时候需要做一些清理工作。问题在于 ... -
Java NIO使用及原理分析 (一) 【转载】
2014-10-24 00:04 489【转载】: http://blog.csdn.net/wuxi ... -
Java 两个集合取交集
2014-10-14 21:16 3134public static Set intersectionS ... -
Calendar类roll和add的区别
2014-10-10 22:28 492import java.text.SimpleDateForm ... -
Gson通过借助TypeToken获取泛型参数的类型的方法
2014-09-30 00:26 630[size=medium]最近在使用Goo ... -
HashMap的遍历效率讨论
2014-09-27 20:41 832经常遇到对HashMap中的key和value值对的遍历操作, ... -
Java 泛型
2014-06-26 12:44 857关键字说明 ? 通配符类型 <? extends T&g ... -
Java泛型集合的理解
2014-06-26 00:05 507[size=medium]什么是泛型? 泛型(Generic ... -
关于java字节码框架ASM的学习
2014-06-19 19:22 888一、什么是ASM ASM是一个java字节码操纵框架, ... -
Java动态代理详解
2014-06-19 17:41 860Java动态代理详解: http: ... -
Java内存,字符串文章收集
2014-06-18 16:24 731java--String常量池问题的几个例子 . http:/ ... -
Java内存解析
2014-06-18 11:48 778栈、堆、常量池等虽同 ... -
Java的堆与非堆内存
2014-01-07 10:59 718堆(Heap)和非堆(Non-heap)内存 按照官方的说法: ... -
JMX 资料收集
2014-01-07 10:53 459JavaSky的专栏 http://blog.csdn.net ... -
JAVA 注解示例 详解
2013-11-12 09:36 824注解(Annotation) 为我们在代码中天界信息提供了 ... -
Java 泛型详解
2013-11-11 22:35 819http://www.360doc.com/content/1 ... -
Java中的Enum的使用与分析
2013-11-09 12:49 819enum枚举类型:在实际问 ... -
Js中escape(),encodeURI()和encodeURIComponent()使用和比较:
2013-09-12 09:42 1033Js中escape(),encodeURI()和encodeU ...
相关推荐
3. **有条件线程安全(Conditionally Thread-Safe)**:在某些特定条件下才能保证线程安全。 4. **线程不安全(Not Thread-Safe)**:在多线程环境下使用时需要外部同步机制来保证其正确性。 5. **无状态(Stateless...
1. **线程不安全的类**:如`ArrayList`在并发环境下易引发数据不一致问题,应使用`ConcurrentHashMap`等线程安全的集合类。 2. **volatile关键字**:确保共享变量对所有线程可见,但不保证原子性。 通过学习这个...
6. **并发容器**:Java集合框架中的某些容器,如`ConcurrentHashMap`、`CopyOnWriteArrayList`和`CopyOnWriteArraySet`等,已经内置了线程安全机制,可以在高并发场景下高效地工作。 7. **线程池**:`...
线程之间需要共享当前的下载进度,这可以通过使用ConcurrentHashMap或者AtomicLong等线程安全的数据结构来实现。在下载过程中,线程会根据“Range”头信息向服务器发送请求,服务器返回相应部分的数据。 为了确保...
9. **并发集合**:Java提供了如ConcurrentHashMap、CopyOnWriteArrayList等并发安全的集合类,它们在多线程环境下提供了高效且线程安全的数据操作。 10. **原子变量类**:AtomicInteger、AtomicLong等原子变量类...
此外,ConcurrentHashMap是一种线程安全的哈希表,比传统的synchronized HashMap在性能上有所提升。 死锁是多线程编程中的一种常见问题,发生在两个或更多线程相互等待对方释放资源,从而导致所有线程都无法继续的...
使用CopyOnWriteArrayList、ConcurrentHashMap等线程安全的集合类能解决这个问题。 2. **volatile关键字**:保证变量对所有线程可见,但不能保证原子性。对于简单读写操作的变量,使用volatile可以替代synchronized...
- **并发容器**则是使用更高效的锁分段技术和无锁编程技术实现线程安全的容器,如`ConcurrentHashMap`、`CopyOnWriteArrayList`等。 ### 多线程的优缺点 - **优点**:提高系统的利用率和响应速度;更好地利用多核...
6. **线程安全的数据结构**:可能会使用`ConcurrentHashMap`、`AtomicInteger`等并发安全的类,确保在多线程环境下数据的一致性。 7. **线程状态和生命周期**:可能通过示例展示线程的五种基本状态(新建、就绪、...
9. **并发容器**:Java并发包提供了线程安全的容器,如`ConcurrentHashMap`、`CopyOnWriteArrayList`等,它们在多线程环境下保证了数据的一致性和正确性,减少了同步的开销。 10. **线程优先级**:Java中的线程有...
为了保证线程安全性,可以考虑使用`Collections.synchronizedList`、`ConcurrentHashMap`等线程安全的容器替代。 综上所述,Java多线程与并发编程是一个既复杂又重要的领域。通过对核心概念和技术的深入理解与应用...
1. Java并发集合:为了在多线程环境下保证数据一致性,Java提供了线程安全的集合类,如`ConcurrentHashMap`、`CopyOnWriteArrayList`等。 2. `Atomic`类:如`AtomicInteger`、`AtomicLong`等,它们提供了原子操作,...
例如,线程安全的集合(如Java的ConcurrentHashMap)可以在多线程环境中保证数据一致性。线程局部存储(Thread Local Storage)则为每个线程提供独立的数据副本,避免了共享状态的冲突。 在实际应用中,合理地设计...
为了确保安全,可以使用ConcurrentHashMap,它提供了线程安全的并发操作。 2. **ThreadLocal详解**: ThreadLocal是Java提供的一种线程局部变量,每个线程都拥有自己独立的ThreadLocal副本,互不影响。在上述代码...
同步容器类使用同步锁来保证线程安全,但可能会影响性能。并发容器类ConcurrentHashMap和CopyOnWriteArrayList等,采用细粒度的锁和弱一致性来减少锁的竞争,提高并发访问效率。 线程池是管理线程生命周期的重要...
这些容器内部实现了线程安全的算法,能够在高并发环境下提供高效的数据访问。 此外,Java并发工具类(java.util.concurrent包)提供了许多实用的工具,如ExecutorService、Future、CountDownLatch、CyclicBarrier和...
线程安全的集合类,如Vector、Collections.synchronizedList()、ConcurrentHashMap等,也是Java多线程编程中常用的数据结构。它们内部实现了同步机制,可以在多线程环境下安全地访问和修改数据。 此外,Java的并发...
在编写多线程程序时,还需要关注线程安全的数据结构,例如 `ConcurrentHashMap`、`CopyOnWriteArrayList` 等,它们在设计时就考虑到了多线程环境下的并发访问。 此外,Java 提供了线程通信的工具类,如 `Object` 的...
- 使用并发工具类如`ConcurrentHashMap`等替代传统的集合类以提高线程安全性。 #### 四、高级多线程技术 1. **线程池:** - 线程池是一种复用固定数量线程的机制,可以减少创建和销毁线程的开销。 - Java中的`...