![](https://img-blog.csdnimg.cn/20201014180756919.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
多线程&并发
killalllsd
性格开朗
展开
-
实战篇
实战篇(一) 在进入实战篇以前,我们简单说一下多线程编程的一般原则.[安全性]是多线程编程的首要原则,如果两个以上的线程访问同一对象时,一个线程会损坏另一个线程的数据,这就是违反了安全性原则,这样的程序是不能进入实际应用的.安全性的保证可以通过设计安全的类和程序员的手工控制.如果多个线程对同一对象访问不会危及安全性,这样的类就是线程安全的类,在JAVA中比如String类就被设计为线程安全的类.而...原创 2008-10-29 15:06:39 · 137 阅读 · 0 评论 -
并发总结累积
1.同步解决的问题:a.脏数据;b.一个操作被执行两次(FutureTask:代表一个过程之被执行一次)2.多个需要快速计算的,同一类型的东东,可以使用Memoizer(构建块-高速缓存)-ConcurrentHashMap+FutureTask....原创 2011-06-26 02:33:13 · 90 阅读 · 0 评论 -
java线程测试
测试解决的问题:线程的上下文切换真的很耗时么,耗时的话到底耗时到什么程度。测试的机器是4核cpu,处理同样多的任务,看看耗时情况。代码如下: private static void testContextSwitch() { AtomicInteger count = new AtomicInteger(0); long toto...原创 2010-07-22 22:47:51 · 103 阅读 · 0 评论 -
防止死锁的方法
下列方法有助于最大限度地降低死锁: 按同一顺序访问对象。 如果所有并发事务按同一顺序访问对象,则发生死锁的可能性会降低。例如,如果两个并发事务获得 Supplier 表上的锁,然后获得 Part 表上的锁,则在其中一个事务完成之前,另一个事务被阻塞在 Supplier 表上。第一个事务提交或回滚后,第二个事务继续进行。不发生死锁。将存...原创 2008-11-28 15:05:53 · 350 阅读 · 0 评论 -
Java 异步消息处理
Java 异步消息处理 在前一节实现异步调用的基础上,现在我们来看一下一个完善的Java异步消息处理机制.[写在本节之前] 在所有这些地方,我始终没有提到设计模式这个词,而事实上,多线程编程几乎每一步都在应该设计模式.你只要能恰如其份地应用它,为什么要在意你用了某某名称的模式呢?...原创 2008-10-29 15:25:46 · 529 阅读 · 0 评论 -
java实现异步调用
java实现异步调用 在JAVA平台,实现异步调用的角色有如下三个角色: 调用者 取货凭证 真实数据 一个调用者在调用耗时操作,不能立即返回数据时,先返回一个取货凭证.然后在过一断时间后凭取货凭证来获取真正的数据. 所以连结调用者和真实数据之间的桥梁是取货凭证.我们先来看它的实现: public class FutureTicket{ private Object d...原创 2008-10-29 15:24:24 · 313 阅读 · 0 评论 -
集合类参数的传递
对于传参,从计算机的本质而言是传值.因为从数据模型而言计算机只认识数学值.但是不同的数学值代表的意义不同,有的数学值表示的是另一个数据的地址.所以根据这个数学值能访问到它表示的数据,我们就把这样的操作称为传址.其实就是某个数据所在的地址的数学表示.其本质还是传值. 从应用层而言我们所说的地址当然是指虚拟地址.而对于中间语言(java的byteCode/.NET的IL)而言是托管地址.我们不必...原创 2008-10-29 15:23:19 · 184 阅读 · 0 评论 -
深入研究线程池
深入研究线程池一.什么是线程池?线程池就是以一个或多个线程[循环执行]多个应用逻辑的线程集合.注意这里用了线程集合的概念是我生造的,目的是为了区分执行一批应用逻辑的多个线程和线程组的区别.关于线程组的概念请参阅基础部分.一般而言,线程池有以下几个部分:1.完成主要任务的一个或多个线程.2.用于调度管理的管理线程.3.要求执行的任务队列.那么如果一个线程循环执行一段代码是否是线程池...原创 2008-10-29 15:21:43 · 72 阅读 · 0 评论 -
再说final变量
从jdk1.0到今天,JAVA技术经过十余年的发展,技术上已经发生了巨大的变化.但final变量的定义从它诞生那天起,就没有发生任何变化,也就是这十多年它就一直表示它原来的意思.但遗憾的是,经过十多年仍然有90%的人没有理解它的真实含义,也没有一篇文章,包括我所见到的所有介绍JAVA的书籍(包括TKJ)都没有说清楚,我相信肯定有些作者是理解的,但没有一个作者向读者说清楚.而中国网友大多数人...原创 2008-10-29 15:20:50 · 68 阅读 · 0 评论 -
深入理解JMM
深入理解JMM的重点JMM具体规定要JLS的 "Thread and lock"一章中,可以说这是一章非常晦涩的一个规范,要想完全把它理解清楚,一般的辛苦是不行的.那是要"相当的~~~"的辛苦.而要把它向别人再解释清楚,那简直就是恶梦.作者自知无力能全面清楚地向大家说明这一章的内容,但以作者的经验,主要从以下两个方面去理解可以改快地抓住本质.而不至于陷入"Thread and lock"...原创 2008-10-29 15:19:54 · 131 阅读 · 0 评论 -
深入理解DCL的安全性
对于双检锁,其实有多种不同的用法,有很多种用法是无论如何不会出现问题的.我最初用双检锁来获取jndi对象时,立即有人告诉我双检锁是不安全的,我笑着告诉他:是否安全我比你更有把握.static DataSource ds = null;public static DataSource getDataSource(){ if(ds == null){ synchronized(XXX.c...原创 2008-10-29 15:19:14 · 221 阅读 · 0 评论 -
深入理解线程对象和线程
深入理解线程对象和线程让我们先以C++来说明,然后我们转到JAVA上来,因为c++对对象的销毁更直接一些:到目前为止,C++还没有直接支持多线程,意思是说多线程不是C++标准库,这也是JAVA程序员对于多线程编程比C++程序更精通一些(这是普通来说的,你不要拿一个C++多线程高手和普通的JAVA程序员比),因为JAVA程序从一开始就接收了多线程的思想并不断地训练.目前最有可能被下一代C+...原创 2008-10-29 15:18:25 · 134 阅读 · 0 评论 -
实战秘籍
实战篇秘籍 (一) 本来这几节的内容想拿出来单独放在秘籍篇中.但由于我在实战篇五的结尾处说:关于这个例子仍然还有很多可说的内容,所以经由这句话所引出的秘籍篇,作为实战篇的继续,就叫它实战秘籍.在实战篇五中,有两个非常关键的重点需要在本节介绍的,之所以称之为秘籍,不客气地说就是很多高手根本没了解的(不是不理解,是压根就不知道)甚至一些在全球小有名气的大牛都是不很清楚.当然,还是有不少人是非常清楚的,...原创 2008-10-29 15:18:00 · 76 阅读 · 0 评论 -
基础篇
基础篇 (一)[写在前面] 随着计算机技术的发展,编程模型也越来越复杂多样化.但多线程编程模型是目前计算机系统架构的最终模型.随着CPU主频的不断攀升,X86架构的硬件已经成为瓶,在这种架构的CPU主频最高为4G.事实上目前3.6G主频的CPU已经接近了顶峰. 如果不能从根本上更新当前CPU的架构(在很长一段时间内还不太可能),那么继续提高CPU性能的方法就是超线程CPU模式. ...原创 2008-10-29 15:10:52 · 52 阅读 · 0 评论 -
fork join例子说明
[code="java"]public static class SelectMaxProblem { private final int[] numbers; private final int start; private final int end; public final int size; ...原创 2017-11-30 21:45:11 · 202 阅读 · 0 评论