一、同步(Synchronous)和异步(Asynchronous)

同步和异步通常用来形容一次方法调用,同步方法,调用者必须等到方法调用返回后,才能继续后续的行为,异步方法调用会立即返回,调用者就可以继续后续的操作

二、并发和并行

并发和并行都可以表示两个或多个任务一起执行,但偏重点点不同,并发偏重于多个任务交替执行,而多个任务之间有可能还是串行的。而并行是真正意义上的“同时执行”。

三、阻塞(Blocking)和非阻塞(Non-Blocking)

一个线程占用了临界资源,那么其他所有需要这个资源的线程就必须在这个临界区中进行等待,等待会导致线程挂起,这种情况就是阻塞,非阻塞的意思与之相反。

四、线程的状态

线程的状态

1、线程的启动是调用start()方法,而不是run()方法。

2、线程的终止、不用stop()是因为stop()方法太过暴力,强行把执行到一半的线程终止,可能会引起数据不一致的问题,一般我们定义一个线程终止的方法,告知线程何时停止即可。

3、线程中断:线程中断并不会使线程立即退出,而是给线程发一个通知,告知目标线程,有人希望你退出,至于目标线程接到通知后如何处理,则完全由目标线程自行决定。与线程中断的有三个方法

Thread.interrupt(): // 中断线程

Thread.isInterrupted()://判断是否中断

Thread.Interrupted():// 判断是否中断,并清除当前中断状态

注:Thread.sleep()方法会抛出一个InterruptedException中断异常,这不是运行时异常,也就是说程序必须捕获并处理它。当线程在休眠时,如果被中断,这个异常会产生。

4、等待(wait)和通知(notify) 注:这两个方法是在Object类中的,意味着任何对象都可以调用这两个方法。

obj.wait()方法,线程会停止继续执行,转为等待状态,直到其他线程调用obj.notify()方法为止。调用object.wait()方法,就会进入object对象的等待队列,当调用object.notify()时,会从这个等待队列中,随机选择一个线程,并将其唤醒,这个选择是不公平的,完全是随机的。notifyAll()会唤醒等待队列里的所有线程,而不是随机选择一个线程。

5、挂起(suspend)和继续执行(resume)线程

suspend与resume是一组相反的操作,调用suspend方法后的线程,必须等到resume方法调用后,才能继续执行。

注:此方法已经被废弃,并不推荐使用,因为suspend()在导致线程暂停的同时,并不会去释放任何资源。此 时,若其他任何线程想要访问被它暂用的锁时,都会被牵连,导致无法正常继续运行。同时,若resume()方法在suspend()前就执行了,那么被suspend()方法挂起的线程,很难有机会被继续执行,更为严重的是,它所占用的锁不会被释放,可能导致整个系统工作不正常。同时,对于被挂起的线程,从线程状态上看,还是Runnable,会严重影响我们的判断.

java交流群669823128

实战JAVA 高并发设计的更多相关文章

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

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

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

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

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

    [实战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并行程序基础 2.1 线程的基本操作 2.1.1 线程中断 2.1.2 等待(wait)和通知(notify) 2.1.3 等待线程结束(join)和谦让(yield) 2. ...

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

    第三章 JDK并发包 1.同步控制 重入锁:重入锁使用java.util.concurrent.locks.ReentrantLock类来实现,这种锁可以反复使用所以叫重入锁. 重入锁和synchro ...

随机推荐

  1. 解释一下python中的逻辑运算符

    python中有三个逻辑运算符:and.or.not print(False and True)#False print(7<7 or True)#True print(not 2==2)#Fa ...

  2. LeetCode:二进制手表【401】

    LeetCode:二进制手表[401] 题目描述 二进制手表顶部有 4 个 LED 代表小时(0-11),底部的 6 个 LED 代表分钟(0-59). 每个 LED 代表一个 0 或 1,最低位在右 ...

  3. JavaScript:关闭当前页面(微信、电脑)

    WeixinJSBridge.call('closeWindow'); // 关闭微信浏览器 window.opener=null; window.open('','_self'); window.c ...

  4. DataNode启动不成功——java.net.BindException: Port in use: localhost:0 Caused by: java.net.BindException: Cannot assign requested address解决办法

    爱折腾的人总是会出线各种奇怪的问题.记得之前听一位大师讲过,我们不能踩完前进路上的所有坑前进,而应该学会怎样避开前进路上的坑,踩得坑越多,可能你的经验越丰富,但是付出的时间代价可能不是经验能换来的.我 ...

  5. JSP实现原理

    JSP全称是Java Server Pages,它和servle技术一样,都是SUN公司定义的一种用于开发动态web资源的技术. 起源: 在很多动态网页中,绝大部分内容都是固定不变的,只有局部内容需要 ...

  6. hadoop入门小知识点

    注意各个主机之间的通信 文件的复制 scp指令 scp /etc/profile acm03:/etc 所有历史版本: archive.apache.org hdfs://acm01:9000     ...

  7. Linux平台下Oracle定时备份数据

    临时收到一个任务,就是在生产环境上定时备份oracle的数据.空闲时间搞了一下,真是一波三折,过程有点小郁闷,结果哈哈.现在进行总结一下 (1)新建一个shell脚本test.sh #!/bin/ba ...

  8. Android -- 利用ContentProvider 读取和写入短信

    1. 读写短信 示例代码 均需要先获得读写短信的权限 <uses-permission android:name="android.permission.WRITE_SMS" ...

  9. Image合并添加文字内容

    场景:将一个头像.二维码.文字信息添加到一张背景图片中,将这些信息合成一张图片. 代码已经测试验证.代码中图片自己随意找几张测试即可. 代码: import com.sun.image.codec.j ...

  10. 为什么Kubernetes不使用libnetwork

    Kubernetes 在 1.0 版本之前就已经有了最初的网络插件.与此同时 Docker 也引入了 libnetwork 和 Container Network Model (CNM).现在 Doc ...