多线程实现内容交替输出


Java多线程并发

image-20201204193843419

多线程基础

基础概念

进程:

线程:

  • 线程是操作系统能够进行运算调度的最小单位,包含在进程之中,是进程中的实际运作单位。
  • 一条线程指的是进程中一个单一顺序的控制流,一个进程中可以并发多个线程,每条线程并行执行不同的任务。

创建线程的方式

继承Thread类:

实现Runnable接口:

基于Callable和Future接口:

使用线程池:

线程的几种状态

新增、就绪、运行、阻塞、终止

image-20201204194410261

线程执行机制

JVM中一个应用可以有多个线程并行执行,线程被一对一映射为服务所在操作系统线程,调度在可用的CPU上执行,启动时会创建一个操作系统线程;当线程终止时,这个操作系统线程也会被回收。

image-20201204194643541

线程运行内存模型

Java虚拟机启动运行时,会创建多个线程,数据区中有的模块是线程共享的,有的是线程私有的

  • 线程共享的有:堆(Heap)、方法区(元空间)
  • 线程私有的是:程序计数器、虚拟机栈、本地方法栈

单个CPU在特定时刻只能执行一个线程,所以多线程通过几块空间的使用,然后不断的争抢CPU的执行时间段。

image-20201204194932940

其他线程概念

  1. 线程优先级: 线程调度器倾向执行线程优先级高的线程,线程优先级高说明获取CPU资源的概率高,或者获取的执行时间分片多,即被执行的概率高,但优先级低的不代表一定最后执行。
  2. 守护线程: 守护线程是支持辅助型线程,主要在程序中起到调度和支持性作用,当JVM中非守护线程全部结束,守护线程也就会结束。如JVM中的GC线程就是一个守护线程。
  3. 线程加入: 线程A中,执行线程B的加入方法,那么A线程就会等待线程B执行完毕再返回继续执行。可使用Thread.join()加入一个线程。
  4. 本地线程: ThreadLocal也叫做线程本地变量,是变量在每个线程中创建的副本变量,每个线程可以访问自己内部的副本变量,线程之间不相互影响。

多线程安全

同步控制

加锁机制

多线程交替打印ABCDEABCDEABCDE的实现方法

Synchronized同步方法

ReentrantLock同步方法

Lock+Condition方式

Semaphore信号量方式


文章作者: shone
版权声明: 本博客所有文章除特別声明外,均采用 CC BY 4.0 许可协议。转载请注明来源 shone !
评论
 上一篇
Hexo使用Next主题 Hexo使用Next主题
Next是一款符合程序员审美的主题,Hexo中切换Next主题的方式非常简单,只需要将主题文件拷贝至根目录下的themes文件夹中,然后修改_config.yml文件中的theme字段即可。 Next主题主题下载Git命令行下载# He
2020-12-16
下一篇 
经典排序算法 经典排序算法
快速排序、堆排序、归并排序 排序算法排序数组 给你一个整数数组nums,请你将该数组升序排列。 力扣912:排序数组 示例1: 示例2: Tips:常见的排序算法都可以,但是尽量使用性能更好的快排、堆排序、归并排序。 快速排序
2020-11-28
  目录