多线程
柯南与皮卡超
https://github.com/creazy-code/evangelist
展开
-
java多线程-(无锁)CAS算法基础
通过cas算法来控制并发级别,这种无锁的实现相比阻塞等待效率要高出很多,CAS算法的过程大致如下: CAS(V,E,N)包含这样的三个参数,V表示要更新的值,N表示新值,E表示预期值,只有当N=E时才会将值更新位N,如果N!=E则说明有其他线程更新了值,不做更新。最终会返回当前V的真实值。多线程中同时操作一个变量时,只有一个会更新成功。CAS操作之所以是线程安全的是基于CPU的cmpxchg(比...原创 2019-11-17 18:49:17 · 188 阅读 · 0 评论 -
java多线程-(happen-before原则)
happen-before(生效可见于,并非字面的先行执行) 程序顺序规则:一个线程中的每个操作,happens-before于该线程中的任意后续操作。 监视器锁规则:解锁happens-before于加锁。 volatile变量规则:volatile变量的写,先发生于读,这保证了volatile变量的可见性 传递性:A先于B,B先于C,那么A必然先于C start规则:线程的...原创 2019-11-09 18:21:08 · 357 阅读 · 0 评论 -
java多线程-原子性,有序性,可见性
1:原子性 是指一个操作是不可中断的。即使是多个线程一起执行的时候,一个操作一旦开始,就不会被其他线程干扰。原子操作一定是线程安全的。(32位机器读取64位的数据类型也不是原子操作) 2:有序性 并发程序,在执行的时候有可能会乱序,操作系统在执行指令的时候会进行一定的优化 3: 可见性 指的是一个线程修改了共享内存的值,另一个线程是否感知的问题。 比如出现指令重排后就会造成变量的可见性...原创 2019-11-09 17:57:51 · 141 阅读 · 0 评论 -
java多线程-线程的同步
在java中要实现多线程之间的同步操作主要有如下两种方式:synchronized关键字和对象的wait()和notify()/notifyAll(); 首先来看一下synchronized关键的字的使用 作用范围: 给指定对象加锁,在进入同步代码块前需要先获得指定对象的锁 package com.ziwu.learn.thread; public class TestLock impl...原创 2019-10-27 14:30:33 · 175 阅读 · 0 评论 -
java多线程-Thread类的一些基本API
1 @Deprecated(since="1.2")Thread.stop() 该方法被声明为废弃方法,不推荐使用,该方法过于暴力,强制结束。该方法会释放它所有的监视器锁,可能会导致数据不一致的问题,举个简单的例子比如i++操作,在一个线程读取I值后被stop掉,其他线程在读取I之后取到的结果是未被写入的结果。 2Thread.sleep(long millis[,nanos]) 使当前正...原创 2019-10-23 21:29:06 · 150 阅读 · 0 评论 -
java多线程-基本的操作及状态分析
1,如何创建线程 public static void main(String[] args) { Thread thread1 = new Thread(){ @Override public void run(){ System.out.println("thread1 is run")...原创 2019-10-23 07:28:34 · 123 阅读 · 0 评论 -
java多线程-基础知识
为了很好的利用多核处理器的性能,并行开发的收益也随之越来越高,为此针对多线程作了一些总结 1,临界区: 临界区指的是一个访问共用资源(例如:共用设备或是共用存储器)的程序片段,而这些共用资源又无法同时被多个线程访问的特性。当有线程进入临界区段时,其他线程或是进程必须等待。(加锁就是限制临界区的访问) 2,锁 死锁(A-B-C-D-A-B-C-D...); 活锁(面对面让路问题,通常因为处...原创 2019-10-20 22:07:52 · 240 阅读 · 0 评论