初识 JAVA并发编程 笔记

线程:CPU执行的最小执行单元

并发/高并发(服务端能够承载的吞吐量)

1、硬件基础
CPU核心数, 内存, 磁盘[机械硬盘,固态硬盘], 网络

2、软件层面(最大化的利用硬件资源)
线程数量、 JVM内存分配大小、 网络通讯机制(BIO 、NIO、AIO)、磁盘IO

3、线程数量如何提升服务端的并发数量
好比:单行车道,和多行车道

并发和并行
单核心CPU也是可以支持多线程的 --> CUP的时间片切换

多线程的特点
 · 异步,不需要即时反馈的,可以异步执行,减少执行时间
 · 并行,同时执行,多任务执行

Java 中的线程
1、Runnable 实现接口
2、Thread 继承类
3、Callable / Furtrue 实现接口  返回执行状态和结果,成功或者失败处理方式


这个工具如何去使用,什么时候使用
1、网络请求分发的场景 
2、文件导入,分片上传
3、短信发送

线程的基础

1、线程的生命周期(java 中有 6 种状态; 操作系统层面 5 种)

# 线程状态

1. 初始(NEW):新创建了一个线程对象,但还没有调用start()方法。

2. 运行(RUNNABLE):Java线程中将就绪(ready)和运行中(running)两种状态笼统的称为“运行”。

线程对象创建后,其他线程(比如main线程)调用了该对象的start()方法。该状态的线程位于可运行线程池中,等待被线程调度选中,获取CPU的使用权,此时处于就绪状态(ready)。就绪状态的线程在获得CPU时间片后变为运行中状态(running)。

3.阻塞(BLOCKED):表示线程阻塞于锁。

4.等待(WAITING):进入该状态的线程需要等待其他线程做出一些特定动作(通知或中断)

[sleep(), wait()、jion()、LockSupport.park() ]

5.超时等待(TIMED_WAITING):该状态不同于WAITING,它可以在指定的时间后自行返回。

[sleep(long), wait(long)、jion(long)、LockSupport.parkUntil(XX) ]

6. 终止(TERMINATED):表示该线程已经执行完毕。

线程阻塞
Time_Waiting  

Waiting 

Blocked  同步代码块阻塞, 锁阻塞状态

IO阻塞

线程启动调 (系统线程启动调用线程流程图)

 线程终止方式

1 线程中断
thread.stop(); #不建议; 暴力强制终止线程

interrupt #友好终止过程,但凡让线程阻塞的机制都有 一个 InterruptedException 

//isInterrupted 是个 native 方法 ,本质上调用的 是 jvm.cpp C或C++语言中定义的方法 

if(!Thread.currentThread().isInterrupted()){

  // Thread.currentThread().isInterrupted() 默认是 false

  // Thread.currentThread().interrupt();

}

thread.start(); 

thread.interrupt(); // 设置interrupted = true ; 查看源码可知; 通过一个共享变量来

 

原文地址:https://www.cnblogs.com/laotan/p/12902551.html