多线程
每一个进程都有一个独立的进程
1.线程:线程是一条执行路径,每一个线程互不影响;
多线程:多线程在一个进程中,有多条不同的执行路径,并执行,目的为了提高程序效率
在一个进程中,一定会有主线程
如果连线程主线程都没有,怎么执行程序;
线程几种分类,用户线程,守护线程
主线程 子线程 GC线程

2.线程启动3中范方式
1.继承thread, 重写run方法,run方法中需要线程志执行代码

3.线程同步,异步
单线程特征:代码从下往上执行
同步概念:采用单线程 ,代码从下往上执行
( http接口同步 异步)
多线程概念:方法一和方法二都有自己独立线程进行执行,互不影响
异步概念:采用多线程,新的一条执行线程,不会影响其它线程
多线程包括异步概念。

4.线程运行状态
新建状态(new Tharad(),没有调用start())–>就绪状态(调用start(),等待CPU分配执行全)–>运行状态(执行run() diamnante)–>
新建–>就绪–>运行–阻塞
新建–>就绪–>运行–死亡

5.守护线程
守护线程:和main相关
用户线程:用户自己创建的线程,用户创建线程,如果主线程停止掉,不会影响用户线程
守护线程特征:和主线程一起销毁
非守护线程:和主线程互不影响

6.join
join正在A线程,另一个线程B,A线程调用B这个join方法
作用:A线程等待线程完毕之后(释放我的CPU执行权),在继续执行,优先级

7.多线程特征:原子性 可见 有序性
线程安全问题:当多个线程共享同一个全局变量,
注意:做写的操作时,可能会受到其它线程的干扰,做读是不会发生线程安全问题。(java内存模型)

JUC(核心)
CAS操作:
自旋(例如0改了一直(0被上锁修改)改不成再拿来一直改(循环),一直在消耗cpu),
转圈一直消耗cpu,跟jvm直接交互,不用操作系统有关系)例如:
0—8----0
A—B---A问题(中间被人改过,最后值还是之前的那个值)
中间经过别人的修改最终恢复开始的值(解决的问题就是加版本号)unsafe.cpp(CopareANdseapint)CAS操作保证原子性
lock(锁总线) comxchg
sychronized(重量级):排队(对列在某个阶段不会操作cpu的,抢索的时候),
什么时候到你了就可以操作,操作系统管理调用,需要手续

AQS操作
AQS定义两种资源共享方式:Exclusive(独占,只有一个线程能执行,如ReentrantLock)和Share(共享,多个线程可同时执行,如Semaphore/CountDownLatch)例如几种方法:
isHeldExclusively():该线程是否正在独占资源。只有用到condition才需要去实现它
tryAcquire(int):独占方式。尝试获取资源,成功则返回true,失败则返回false
tryRelease(int):独占方式。尝试释放资源,成功则返回true,失败则返回false
tryAcquireShared(int):共享方式。尝试获取资源。负数表示失败;0表示成功,但没有剩余可用资源;正数表示成功,且有剩余资源
tryReleaseShared(int):共享方式。尝试释放资源,成功则返回true,失败则返回false
总结:一般来说,自定义同步器要么是独占方法,要么是共享方式,他们也只需实现tryAcquire-tryRelease、tryAcquireShared-tryReleaseShared中的一种即可。但AQS也支持自定义同步器同时实现独占和共享两种方式,如ReentrantReadWriteLock

volatie与synchronized区别
1.volatie性能强于synchronized,volatie可以具有可见性,但不能保证原子性,synchronized可以保证原子性, 禁止重排序
synchronized:既可以保证原子性还可以保证可见性
2.性能方面:synchronized关键字防止多个线程同时执行一段代码,就会影响程序执行效率,而volatie关键字在某些情况下性能优于synchronized
但是注意volatie关键字是无法代替synchronized关键字,因为volatie关键字无法保证操作的原子性

重排序概念:
cpu会对代码实现优化,不会对有依赖关系做重排序
代码执行的顺序肯可能会发生改变,但是执行的结果不会发生任何改变;
在多线程遇到多,会改变多线程的执行结果

多线程
数据依赖关系:
int a =1;
int b = 2;
int c = a * b;
scrial 不管怎么重排序。但是目的提高并行度,但是不能影响到正常的结果

证明同步方法使用this
两个线程,分别为A和B,共享同一个全局变量,每一个锁不同的;
如果A线程使用非静态同步方法,B线程使用同步代码块
结论:同步代码块使用this锁,能够和非静态同步方法实现方法;
得出:非静态同步函数使用this锁

线程CAS AQS浅谈相关推荐

  1. python中gil锁和线程锁_浅谈Python中的全局锁(GIL)问题

    CPU-bound(计算密集型) 和I/O bound(I/O密集型) 计算密集型任务(CPU-bound) 的特点是要进行大量的计算,占据着主要的任务,消耗CPU资源,一直处于满负荷状态.比如复杂的 ...

  2. java线程切换 notify_浅谈 Java线程状态转换及控制

    作者:城北有个混子 出自:博客园 1.线程的状态(系统层面) 一个线程被创建后就进入了线程的生命周期.在线程的生命周期中,共包括新建(New).就绪(Runnable).运行(Running).阻塞( ...

  3. java线程池和线程实例化_浅谈Java 线程池原理及使用方式

    一.简介 什么是线程池? 池的概念大家也许都有所听闻,池就是相当于一个容器,里面有许许多多的东西你可以即拿即用.java中有线程池.连接池等等.线程池就是在系统启动或者实例化池时创建一些空闲的线程,等 ...

  4. java 线程 交给spring_浅谈Java中spring 线程异步执行

    多线程并发处理起来通常比较麻烦,如果你使用spring容器来管理业务bean,事情就好办了多了.spring封装了Java的多线程的实现,你只需要关注于并发事物的流程以及一些并发负载量等特性,具体来说 ...

  5. 浅谈Python多线程

    线程 一.什么是线程? 操作系统原理相关的书,基本都会提到一句很经典的话: "进程是资源分配的最小单位,线程则是CPU调度的最小单位". 线程是操作系统能够进行运算调度的最小单位. ...

  6. 浅谈Java锁,与JUC的常用类,集合安全类,常用辅助类,读写锁,阻塞队列,线程池,ForkJoin,volatile,单例模式不安全,CAS,各种锁

    浅谈JUC的常用类 JUC就是java.util.concurrent-包下的类 回顾多线程 Java默认有几个线程? 2 个 mian.GC Java 真的可以开启线程吗? 开不了,点击源码得知:本 ...

  7. java 线程aba,浅谈Java中ABA问题及避免,浅谈javaaba避免

    浅谈Java中ABA问题及避免,浅谈javaaba避免 本文主要研究的是关于Java中ABA问题及避免的相关内容,具体如下. 在<Java并发实战>一书的第15章中有一个用原子变量实现的并 ...

  8. 浅谈ThreadPool 线程池(引用)

    出自:http://www.cnblogs.com/xugang/archive/2010/04/20/1716042.html 浅谈ThreadPool 线程池 相关概念: 线程池可以看做容纳线程的 ...

  9. 浅谈线程池(下):相关试验及注意事项

    三个月,整整三个月了,我忽然发现我还有三个月前的一个小系列的文章没有结束,我还欠一个试验!线程池是.NET中的重要组件,几乎所有的异步功能依赖于线程池.之前我们讨论了线程池的作用.独立线程池的存在意义 ...

最新文章

  1. VScode 插件、配置记录
  2. GD32定时器输入捕获例程
  3. sharepoint列表EventHandle的开发 -转
  4. windows系统中hosts文件位置
  5. [C# 基础知识梳理系列]专题二:委托的本质论
  6. Eclipse编程快捷键
  7. f60gen command
  8. castle windsor学习----- Services and Components 两者的定义
  9. uni-app获取当前具体日期时间并将其格式化
  10. 设计类时需要注意的6个地方
  11. $.getJSON()不执行回调函数
  12. 词根词缀学单词【1】
  13. java实现简单泡泡屏保动画及点击变实心泡泡
  14. matlab距离变换,图像处理之距离变换
  15. 微信 - 微信小程序
  16. 计算机网络常见面试问题和解析
  17. 服务器需要支持5g,5G时代需要什么样的服务器?
  18. 服务端渲染VUE_SSR
  19. 2009年三季度基金持股减仓表1
  20. First visit and every visit MC

热门文章

  1. 【C、C++、Windows API、 boost】多种方式判断文件、目录是否存在
  2. C# File.Exists判断系统文件 警惕32位和64位的差异
  3. 生活中常见的操作系统
  4. 【IEEE_SV-7.5】动态数组Dynamic arrays
  5. 阵列算法matlab,这是张小飞的阵列信号的全部MAT
  6. 推广渠道的选择:如何找到最适合自己的推广渠道?
  7. 【Mysql】derived table派生表
  8. 2017河南工业大学校赛 D rqy的键盘
  9. PAT-B 1037. 在霍格沃茨找零钱
  10. 全球与中国银焊膏市场现状及未来发展趋势