Java基础——Java多线程总结

小微 科技Java基础——Java多线程总结已关闭评论131字数 1946阅读模式
摘要1 基本概括2 文章详情1.1 Java基础——Java多线程(进程与线程的介绍)1.2 Java基础——Java多线程(线程的创建方式)1.3 Java基础——Java多线程(什...

1 基本概括

2 文章详情

1.1 Java基础——Java多线程(过程与线程的介绍)

1.2 Java基础——Java多线程(线程的创立方式)文章源自微观生活(93wg.com)微观生活-https://93wg.com/7394.html

1.3 Java基础——Java多线程(什么是过程?)文章源自微观生活(93wg.com)微观生活-https://93wg.com/7394.html

1.4 Java基础——Java多线程文章源自微观生活(93wg.com)微观生活-https://93wg.com/7394.html

1.5 Java基础——Java多线程文章源自微观生活(93wg.com)微观生活-https://93wg.com/7394.html

1.6 Java基础——Java多线程(什么是线程安全?)文章源自微观生活(93wg.com)微观生活-https://93wg.com/7394.html

1.7 Java基础——Java多线程(多线程死锁问题)文章源自微观生活(93wg.com)微观生活-https://93wg.com/7394.html

1.8 Java基础——Java多线程(ThreadLocal详解)文章源自微观生活(93wg.com)微观生活-https://93wg.com/7394.html

1.9 Java基础——Java多线程(过程与线程间通讯方式)文章源自微观生活(93wg.com)微观生活-https://93wg.com/7394.html

1.10 Java基础——Java多线程(volalite详解)文章源自微观生活(93wg.com)微观生活-https://93wg.com/7394.html

1.11 Java基础——Java多线程(synchronized详解)文章源自微观生活(93wg.com)微观生活-https://93wg.com/7394.html

1.12 Java基础——Java多线程(synchronized优化)

1.13 Java基础——Java多线程(锁的介绍)

1.14 Java基础——Java多线程(Lock接口详解)

3 问题总结

3.1 过程与线程的介绍相关问题

3.1.1 过程与线程之间的联络

1、一个线程只能属于一个过程,而一个过程可以有多个线程,但至少有一个线程(通常说的主线程)。

2、资源分配给过程,同一过程的所有线程同享该过程的所有资源。

3、线程在执行进程中,需要协作同步。不同过程的线程间要应用动静通讯的方法实现同步。

4、处理机分给线程,即真正在处理机上运行的是线程。5、线程是指过程内的一个执行单元,也是过程内的可调度实体。

3.1.2 过程与程序之间的区分

1、过程是动态的,程序是静态的。程序是有序代码的聚拢,过程是程序执行的进程。

2、过程是暂时的,程序是永远的。过程是一个状况变化的进程,程序可永远保留。

3、过程与程序的对应关系。通过量次执行,一个程序可对应多个过程;通过调用关系,一个过程可包含多个程序。

4、过程以及程序的组成不同。过程的组成包含程序,数据以及PCB。

3.2 什么是过程相关问题

3.2.1 JAVA过程骤然消失问题和解决方案

无外乎三种情况。

1 linux的OOM killer杀死

解决方案:

Linux 内核有个机制叫OOM killer(Out-Of-Memory killer),该机制会监控那些占用内存过大,特别是瞬间很快损耗大量内存的过程,为了避免内存耗尽而内核会把该过程杀掉。

因而,你发现java过程骤然没了,首先要怀疑是否被linux的OOM killer给干掉了!

你可以去下面这个文件里翻系统报错日志:/var/log/messages

你执行命令

egrep -i &39; /var/log/messages

去日志里进行查询。

固然,你也能够去内核日志里头查询。有时Linux系统或者系统上运行的java或者其它过程,会产生一些稀里糊涂的问题,比如骤然挂掉了,比如骤然重启等等。在软件上找不到问题所在,此时咱们应当怀疑硬件或者内核的问题,此时咱们就能够使用 dmesg来查看:

dmesg | grep java

输出如下

[5673702.665338] Out of memory: Kill process 29953 score 431 or sacrifice child
[5673702.665338] Killed process 29953, UID 500, total-vm:9805316kB, anon-rss:2344496kB, file-rss:128kB

完整是可以看到内核查过程做对操作。

2 JVM本身故障

解决方案:

当JVM产生致命过错致使崩溃时,会生成一个hs_err_pid_xxx.log这样的文件,该文件包括了致使 JVM crash 的重要信息,咱们可以通过分析该文件定位到致使 JVM Crash 的缘由,从而修复保证系统不乱。默许情况下,该文件是生成在工作目录下的,固然也能够通过 JVM 参数指定生成路径:

-XX:ErrorFile=/var/log/hs_err_pid.log

这个文件的内容他主要有如下内容

  • 日志头文件
  • 致使 crash 的线程信息
  • 所有线程信息
  • 安全点以及锁信息
  • 堆信息
  • 本地代码缓存
  • 编译事件
  • gc 相关记录
  • jvm 内存映照
  • jvm 启动参数
  • 服务器信息

拿到这个文件后,需要细心的分析。

3 jvm的OOM致使过程退出比较罕见

解决方案:

很少遇到JVM的OOM,致使java过程退出的情况。

由于,一般情况下,呈现OOM异样,JVM的GC会进行回收,是不会致使JVM过程退出的。要真说独一致使 退出的情况,那就是内存泄露,因为内存占用愈来愈大,结果。。。。

无非这类JVM的OOM致使的异样,很好排查。

由于,你注意两个个参数

-XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=*/java.hprof;

然后去找dump快照文件,接下来借助VisualVM这类可视化工具分析就行。很容易定位问题。

继续阅读
 
小微
  • 版权声明: 本文部分文字与图片资源来自于网络,转载此文是出于传递更多信息之目的,若有来源标注错误或侵犯了您的合法权益,请立即通知我们(管理员邮箱:81118366@qq.com),情况属实,我们会第一时间予以删除,并同时向您表示歉意,谢谢!
  • 转载请务必保留本文链接:https://93wg.com/7394.html