JAVA 并发编程

来源:互联网 发布:免费微信一键转发软件 编辑:程序博客网 时间:2024/06/04 00:39

JMM JAVA MEMRY MODLE JAVA内存模型

这里写图片描述

可见性

士大夫 

原子性

原子性

顺序性

顺序性 

Happens-before原则

程序次序法则监视器法则volatie变量法则线程启动法则线程终结法则中断法则终结法则传递性     

线程

生命周期

Java当中,线程通常都有五种状态,创建、就绪、运行、阻塞和死亡。  第一是创建状态。在生成线程对象,并没有调用该对象的start方法,这是线程处于创建状态。  第二是就绪状态。当调用了线程对象的start方法之后,该线程就进入了就绪状态,但是此时线程调度程序还没有把该线程设置为当前线程,此时处于就绪状态。在线程运行之后,从等待或者睡眠中回来之后,也会处于就绪状态。  第三是运行状态。线程调度程序将处于就绪状态的线程设置为当前线程,此时线程就进入了运行状态,开始运行run函数当中的代码。  第四是阻塞状态。线程正在运行的时候,被暂停,通常是为了等待某个时间的发生(比如说某项资源就绪)之后再继续运行。sleep,suspend,wait等方法都可以导致线程阻塞。  第五是死亡状态。如果一个线程的run方法执行结束或者调用stop方法后,该线程就会死亡。对于已经死亡的线程,无法再使用start方法令其进入就绪。
  1. 实现

     Thread、Runnable、Callable Runnable和Thread区别: 除了单继承这个问题,还有一个问题可能大家没有感受到Callable1.5引入,具有返回值,并且支持泛型,加入泛型是解决什么问题?并且不是run方法了是call方法哦
  2. 状态

    NEW 状态是指线程刚创建, 尚未启动BLOCKED  这个状态下, 是在多个线程有同步操作的场景, 比如正在等待另一个线程的synchronized 块的执行释放, 或者可重入的 synchronized块里别人调用wait() 方法, 也就是这里是线程在等待进入临界区WAITING  这个状态下是指线程拥有了某个锁之后, 调用了他的wait方法, 等待其他线程/锁拥有者调用 notify / notifyAll 一遍该线程可以继续下一步操作, 这里要区分 BLOCKED 和 WATING 的区别, 一个是在临界点外面等待进入, 一个是在理解点里面wait等待别人notify, 线程调用了join方法 join了另外的线程的时候, 也会进入WAITING状态, 等待被他join的线程执行结束TIMED_WAITING  这个状态就是有限的(时间限制)的WAITING, 一般出现在调用wait(long), join(long)等情况下, 另外一个线程sleep后, 也会进入TIMED_WAITING状态TERMINATED 这个状态下表示 该线程的run方法已经执行完毕了, 基本上就等于死亡了(当时如果线程被持久持有, 可能不会被回收)
  3. 启动

  4. 弃用
  5. 终止

线程池

java.util.concurrent.Executor;

Java.util.concurrent中的Executor(中文翻译是执行器)是管理咱们之前的Thread线程的。目的是是简化并发编程ExecutorService(执行器)Java两种基础线程池的选择ScheduledThreadPoolExecutor和ThreadPoolExecutor

这里写图片描述

这里写图片描述