
并发
淘气的高老板
污,孤傲,高冷,薄情,悲天悯人的高老板
展开
-
java i++ 并非原子操作的解决方法——用AtomicInteger
public class Test1 { private static int a = 0; public static void main(String[] args) throws InterruptedException{ System.err.println("LOL"); int n=500000; while(n-->0){ startAdd(); }原创 2014-05-24 16:52:33 · 2429 阅读 · 1 评论 -
java 多线程注意事项
一,线程池的概念线程池的作用:线程池作用就是限制系统中执行线程的数量。 根据系统的环境情况,可以自动或手动设置线程数量,达到运行的最佳效果;少了浪费了系统资源,多了造成系统拥挤效率不高。用线程池控制线程数量,其他线程排队等候。一个任务执行完毕,再从队列的中取最前面的任务开始执行。若队列中没有等待进程,线程池的这一资源处于等待。当一个新任务需要运行时,如果线程池中有等待的工作线程原创 2017-02-21 12:42:42 · 4581 阅读 · 0 评论 -
沈洵:分布式事务原理与实践之多机事务
分布式事务与单机事务,相同与不同分布式事务的主要难题传统数据库的分布式事务新兴互联网行业的分布式事务尝试google spanner赏析阿里的分布式事务模型DRDS/TDDL实战目标完整的事务支持像传统单机事务一样的操作方式可按需无限扩展事务最重要的一件事就是易用本身。容易理解的模型往往性能都不好,性能好的模型往往不容原创 2017-02-01 18:12:43 · 1790 阅读 · 0 评论 -
沈洵:分布式事务原理与实践之单机事务
事务简介处理事务的常见思路事务处理的常见问题分布式事务面临的问题传统分布式事务模型赏析Google Spanner的创新与代价DRDS/TDDL的实践什么事事务看起来很简单,就三个命令bgin ccommitrollback如果没有对这个的原理了解的化,不会取舍事务的简介同步控制事务的核心是锁与并发优势:方便理解劣原创 2017-01-05 17:26:45 · 2422 阅读 · 0 评论 -
JAVA 8 并发增强 (6)并行数组
String contents = new String(Files.readAllBytes(Paths.get("test.txt")), StandardCharsets.UTF_8); String[] words = contents.split("[\\P{L}]+");// 根据非字母字符对字符串进行分隔 // Arrays.parallelSort(words); Ar原创 2016-08-10 09:55:56 · 3536 阅读 · 0 评论 -
JAVA 8 并发增强 (5) 线程安全的Set
Q:如何得到一个线程安全的Set? /* * 如何得到一个大的,线程安全的Set * 它其实是对ConcurrentHashMap对象的封装,所有的映射的值都是Boolean.TRUE */ Set words = ConcurrentHashMap. newKeySet(); words.add("a"); words.add("a"); word原创 2016-08-09 17:46:57 · 18940 阅读 · 2 评论 -
JAVA 8 并发增强 (4) ConcurrentHashMap批量操作
/* * java8为并发哈希映射提供了批量操作数据操作,即使在其他线程同时操作映射时也可以安全的执行。 * 批量数据操作会遍历映射并对匹配的元素进行操作。在批量操作过程中,不需要冻结映射的一个快照。除非你恰好知道在这段时间 * 内映射没有被修改,否则你应该将结果看作是映射状态的一个近似值。批量操作有三类 * a,search会对每个键或值应用一个函数,直到函数返回一个nu原创 2016-08-09 17:10:30 · 3248 阅读 · 0 评论 -
JAVA 8 并发增强 (3)ConcurrentHashMap改进
/** * ConcurrentHashMap是线性安全的,多个线程不需要对内部结构造成破坏,就可以删除或者添加元素。 * 性能高,允许多个线程并发更新哈希表的不停部分,而不会造成相互堵塞 * ConcurrentHashMap的size是int类型,J8为了应付数量巨大的并发哈希映射,引入了一个mappingCount方法 * 用来返回一个反应大小的long型值 tips:哈希映射将会将原创 2016-08-09 15:43:10 · 3873 阅读 · 0 评论 -
JAVA 8 并发增强(1) 多线程修改某个计数器的方式
Q:如何正确的并发修改一个AtomicLong的值?/*不同线程检测最大值*/AtomicLong largest = new AtomicLong();long obsvValue = 0;/*错误的方式,此更新不是原子性的*/largest.set(Math.max(largest.get(), obsvValue));/* 正确的方式,这种方式比锁快 */long原创 2016-07-29 10:00:02 · 2269 阅读 · 0 评论 -
Java控制并发 AtomicBoolean Lock Volatile
sychrognized + volatile控制并发的疑问:这里把volatile 关键字去掉会有什么不一样吗???原创 2014-07-17 11:49:48 · 1891 阅读 · 0 评论