第一章

几个概念

  • 同步:一次方法调用须等到其返回后才能有后续
  • 异步:一次方法调用后在另一线程执行,调用者可不必等其返回就可进行后续
  • 并发:任务以极短的时间交替进行
  • 并行:任务同时进行
  • 临界区:公共资源
  • 阻塞:临界区资源被占用,须等待前一线程释放。
  • 死锁:彼此占用所需资源,都无法继续进行
  • 饥饿:线程优先级太低,总是无法获得资源
  • 活锁:线程彼此主动释放资源给对方,导致无法拿到所有资源正常执行

并发级别:

  • 阻塞:临界区加锁,得不到锁就会被挂起等待直到得到所有资源(悲观)
  • 无饥饿:公平的锁,所有主程序都有机会执行
  • 无障碍:大家都能拿到资源,出了冲突就回滚(乐观),可能导致无限回滚,无法执行完任意一个线程
  • 无锁:无锁的并行都是无障碍的,不同的是必然会保证有一个线程能够在有限步完成执行
  • 无等待:要求所有线程在有限步内完成(一种实现情况是:读时不加控制,写时修改在副本上伺机返回)

JMM(Java的内存模型)建立原则:原子性,可见性,有序性

原子性:操作不可分,一旦执行不会被干扰

可见性:一个线程修改了一个共享变量的值,其他变量能否立刻知道此修改

有序性:程序执行顺序问题(由指令重排导致)

第二章

1.进程与线程

2.线程的基本操作

  • 新建线程:继承Thread或者实现Runable/Callable,重写run,调用start。
  • 终止线程:尽量不使用stop()方法
  • 线程中断:interrupt()——增强的stop方法

  • 等待与通知(与锁有关)

    wait(),notify()必须是包含在synchronzied语句中的----notify()随机唤醒一个线程,notifyAll()全部唤醒。

  • 挂起与继续执行(废弃方法)
  • 等待线程结束(join())与谦让(yield)

可以看出来当前等待对象threadA会一直阻塞,直到被等待对象threadB结束后即isAlive()返回false的时候才会结束while循环,当threadB退出时会调用notifyAll()方法通知所有的等待线程.

public static native void yield();这是一个静态方法,一旦执行,它会是当前线程让出CPU,但是,需要注意的是,让出的CPU并不是代表当前线程不再运行了,如果在下一次竞争中,又获得了CPU时间片当前线程依然会继续运行.另外,让出的时间片只会分配给当前线程相同优先级的线程.

3.对于经常修改的字段类型,可以使用字段volatile确保线程改动数据后其他线程可以看到此改动。

4.线程组

5.守护线程,执行系统的工作线程,特点是当只此线程时虚拟机会停止(Daemon)———可自定义,

6.线程优先级

7.synchronized关键字

并发下的错误:

ArrayList:线程不安全(访问时破坏了内部一致性、访问时保存容器大小的变量访问异常)——————使用Vector

HashMap:线程不安全(可能结构破坏出现环导致无法退出)——————————————————使用ConcurrentHashMap

i++本质:i=Integer.valueOf(i.intValue()+1);其中,Integer.valueOf是一个工厂方法,每次创建一个新的Integer对象,并将其引用复制给i

i++

周会材料:高并发程序设计<一>的更多相关文章

  1. 【实战Java高并发程序设计 7】让线程之间互相帮助--SynchronousQueue的实现

    [实战Java高并发程序设计 1]Java中的指针:Unsafe类 [实战Java高并发程序设计 2]无锁的对象引用:AtomicReference [实战Java高并发程序设计 3]带有时间戳的对象 ...

  2. 【实战Java高并发程序设计6】挑战无锁算法:无锁的Vector实现

    [实战Java高并发程序设计 1]Java中的指针:Unsafe类 [实战Java高并发程序设计 2]无锁的对象引用:AtomicReference [实战Java高并发程序设计 3]带有时间戳的对象 ...

  3. 【实战Java高并发程序设计 5】让普通变量也享受原子操作

    [实战Java高并发程序设计 1]Java中的指针:Unsafe类 [实战Java高并发程序设计 2]无锁的对象引用:AtomicReference [实战Java高并发程序设计 3]带有时间戳的对象 ...

  4. 【实战Java高并发程序设计 4】数组也能无锁:AtomicIntegerArray

    除了提供基本数据类型外,JDK还为我们准备了数组等复合结构.当前可用的原子数组有:AtomicIntegerArray.AtomicLongArray和AtomicReferenceArray,分别表 ...

  5. 【实战Java高并发程序设计 3】带有时间戳的对象引用:AtomicStampedReference

    [实战Java高并发程序设计 1]Java中的指针:Unsafe类 [实战Java高并发程序设计 2]无锁的对象引用:AtomicReference AtomicReference无法解决上述问题的根 ...

  6. 【实战Java高并发程序设计 1】Java中的指针:Unsafe类

    是<实战Java高并发程序设计>第4章的几点. 如果你对技术有着不折不挠的追求,应该还会特别在意incrementAndGet() 方法中compareAndSet()的实现.现在,就让我 ...

  7. 《实战java高并发程序设计》源码整理及读书笔记

    日常啰嗦 不要被标题吓到,虽然书籍是<实战java高并发程序设计>,但是这篇文章不会讲高并发.线程安全.锁啊这些比较恼人的知识点,甚至都不会谈相关的技术,只是写一写本人的一点读书感受,顺便 ...

  8. JAVA高并发程序设计笔记

    第二章 Java并行程序基础 1.join()的本质是让调用线程wait()在当前线程的对象上 2.Thread.yiedl()会使当前线程让出CPU 3.volatile保证可见性,无法保证原子性( ...

  9. 《实战Java高并发程序设计》读书笔记

    文章目录 第二章 Java并行程序基础 2.1 线程的基本操作 2.1.1 线程中断 2.1.2 等待(wait)和通知(notify) 2.1.3 等待线程结束(join)和谦让(yield) 2. ...

  10. 周会材料:高并发程序设计<二>

    第三章 JDK并发包https://www.cnblogs.com/sean-zeng/p/11957569.html JDK内部提供了大量实用的API和框架.本章主要介绍这些JDK内部功能,主要分为 ...

随机推荐

  1. jfinal shiro共享

    和上一篇tomcat sexxion共享一样,用的也是redis 代码: package com.test.shiro; import com.jfinal.log.Log; import com.j ...

  2. 基于HTML的购物车模型的代码设计

    HTML代码 <html lang="en"> <head> <meta charset="UTF-8"> ​ ​ < ...

  3. Linux 按 Ctrl + S 卡死的解决办法

    ctrl + s 的作用是暂停屏幕输出 ctrl + q 恢复屏幕输出即可 恢复之后会出现在暂停期间输入的字符

  4. Appium(十):元素定位(加强版)

    1. 元素定位 写完上一篇元素定位的博客,发现实用性基本为零.这几天真的烦死我了,一直在找资料,还去看了一遍appium官网文档.最后结合着selenium的定位方法,测试出几种可行的元素定位方法. ...

  5. 基于Jenkins的开发测试全流程持续集成实践

    今年一直在公司实践CI,本文将近半年来的一些实践总结一下,可能不太完善或优美,但的确初步解决了我目前所在项目组的一些痛点.当然这仅是一家之言也不够完整,后续还会深入实践和引入Kubernetes进行容 ...

  6. .NET Core 轻量级模板引擎 Mustachio

    一. 前言 Mustachio 是一款轻量级且强大的模板引擎,可以用在网页渲染.代码生成器等需要模板引擎的场景.我用它是用在配置文件模板化的场景,在配置文件里面编写一些模板语法,然后从 Cloud 拉 ...

  7. Spring Security OAuth2 开发指南(非最新版本)

    请注意哈,本文翻译的时候,官网的的版本和本文翻译的时候是一一对应的. 但是官网已经更新文档和概念了,因此和本文翻译的就不在是同一个范围了. 因此我已经将标题修改为(非最新版本),各位老铁直接看官网就可 ...

  8. PlayJava Day024

    造型Cast补充: 子类的对象可以赋值给父类的变量 注意:Java中不存在对象对对象的赋值 父类的对象不能赋值给子类的变量 例: Vechicle v ; Car c = new Car() ; v ...

  9. Ubuntu Server 上使用Docker Compose 部署Nexus(图文教程)

    场景 Docker-Compose简介与Ubuntu Server 上安装Compose: https://blog.csdn.net/BADAO_LIUMANG_QIZHI/article/deta ...

  10. FCC---CSS Flexbox: Use the flex-direction Property to Make a Row

    Adding display: flex to an element turns it into a flex container. This makes it possible to align a ...