Java
chenm91
这个作者很懒,什么都没留下…
展开
-
关于Java中的volatile变量
在Java中进行线程同步,一般使用的是synchronized加锁机制,但是有时候对某些变量可以采用volatile标示达到线程同步的效果。当把一个变量指明为volatile时,实际上告诉编译器,这个变量是会被多线程访问的。因此编译器将不会做下面两种操作:1、不会将该变量上的操作与其他内存操作重排序;2、不会将该变量缓存到寄存器。这样做的结果导致对该变量的读取和写入这两种操作一定是...原创 2019-05-29 10:23:15 · 375 阅读 · 0 评论 -
多线程编程的关键是要保护数据
多线程的程序与单线程相比,主要的特点是“同一份数据可能会被多个线程访问,而每个线程执行的程序代码是有可能被从中间中断的,因此如果处理不好,数据的改变可能不是我们期望的那样。”为了让数据是按期望的那样被修改,必须保证在多个线程访问这些数据时,一定是某个线程执行的某段代码按预期全部执行完,才让另一个线程执行,这称为线程同步concurrency,也就是对数据的保护机制。同步的方式有很多种,比如对某...原创 2019-06-14 08:19:59 · 566 阅读 · 0 评论 -
关于Executor框架
写多线程的程序离不开Thread和Runnable两个类,这两者初看起来是一回事,其实不同。Runnable代表了一个要执行的任务,而Thread代表了一个执行任务的工人。工人和任务之间可以有各种组合方式,比如可能所有任务都由一个工人完成,也可能固定数量的工人完成所有任务,也可能根据任务的多少动态增加工人数来完成任务等等。因此Runnable和Thread之间有一个执行策略需要配置,java提供了...原创 2019-06-20 06:37:07 · 128 阅读 · 0 评论 -
AtomicXXX原子类
Java中有二十多个Atomic类,用来表示线程安全的数据类型或对象引用,是线程安全的机制之一。它与volatile修饰的数据不同之处在于:由它封装的数据操作都是线程安全的,比如对于AtomicInteger有incrementAndGet()操作,相当于线程安全的++i,这一点volatile就做不到。...原创 2019-06-05 06:44:34 · 111 阅读 · 0 评论