java并发编程
专注网赚的程序员
一只走过京东、美团、阿里等大厂的野生程序员,专注于写代码和网赚, 欢迎交流
展开
-
Linux vmstat命令实战详解【并发编程基础】
vmstat命令是最常见的Linux/Unix监控工具,可以展现给定时间间隔的服务器的状态值,包括服务器的CPU使用率,内存使用,虚拟内存交换情况,IO读写情况。这个命令是我查看Linux/Unix最喜爱的命令,一个是Linux/Unix都支持,二是相比top,我可以看到整个机器的CPU,内存,IO的使用情况,而不是单单看到各个进程的CPU使用率和内存使用率(使用场景不一样)。一般vmstat工具的原创 2017-08-03 11:27:29 · 273 阅读 · 0 评论 -
java并发编程的艺术【二】java并发机制的底层实现原理
java代码在编译后会变成java的字节码,字节码会被类加载器加载到jvm里,jvm执行字节码,最终转化为汇编指令在cpu上运行,这个过程是java代码执行的基本原理,编程的最终还是与cpu和内存的交互,多线程编程带来的挑战之一便是如何能让多个线程同时执行一个任务的时候不出错? 具体到同时修改一个变量的时候如何不出错? java底层基本是通过“锁”的概念来做。 java中有两个常见的锁,volat原创 2017-08-10 13:36:07 · 382 阅读 · 0 评论 -
java并发编程的艺术【一】并发编程的挑战
java并发编程的目的显然是为了解决单线程的对资源利用不充分到这的程序运行速度慢的问题,但是并发编程的优势自然也给并发编程带来了一系列的挑战,最明显的是程序的复杂性大幅度的增加了,写出完美的并发并不是一件容易的事儿。- 上下文的切换1,什么是上下文切换? cpu在执行多线程任务的时候,给我们的感官上来说是同步在执行的,其实单个cpu在同一个时间点上只能执行一项任务,通过极其快速的切换执行的原创 2017-08-03 14:25:22 · 216 阅读 · 0 评论 -
java并发编程的艺术【三】-【一】java内存模型基础
并发编程的两个关键问题 1,并发编程中需要处理两个关键的问题,第一个是线程之间的通讯, 通讯是指的是线程之间如何交换信息,在命令式的编程中,线程之间的通讯有两种方式:共享内存和消息传递。 2,第二个问题是线程同步,同步指的是程序中用于控制不同线程间的操作发生相对顺序的机制。java采用的是共享内存模型进行线程间的通讯,在共享内存模型下,同步是显式的进行的,程序员必须显式的指定方法或者代码块之间的原创 2017-11-20 19:41:42 · 205 阅读 · 0 评论 -
java并发编程的艺术【三】-【二】重排序与顺序一致性
重排序 重排序就是指的是编译器和处理器为了提高程序性能而对指令进行重新排序。数据依赖性和as-if-serial语义 当两个指令有数据依赖的时候,也就是说重排序会影响程序执行的结果的时候,编译器和处理器就不会改变指令顺序,也就是as-if-serial语义:不管如何排序,程序执行的结果不能改变。例如:double pi = 3.14; //A double r = 1; //B原创 2017-11-21 11:40:03 · 374 阅读 · 0 评论 -
java并发编程的艺术【三】-【三】内存语义
Volatile的内存语义Volatile的内存语义 可见性:对于一个volatile变量的读,总能看见任意线程对volatile变量最后的写。 原子性:对于任意单个volatile变量的读写具有原子性,但对于符合操作不具有原子性。当写volatile变量时,jvm会把线程中对用的本地存贮刷新到内存。 读取volatile变量时,jvm会把本地存贮的值置为无效,读取内存中的值。Volatile原创 2017-11-27 14:52:34 · 296 阅读 · 0 评论