ai自学教程 求各位大神,Java多线程看哪本书好?
求各位大神,Java多线程看哪本书好?
推荐Java并发编程练习本书。
本书从并发和线程安全的基本概念出发,介绍如何使用类库提供的基本并发构建块来避免并发风险、构造线程安全类和验证线程安全规则。
如何将较小的线程安全类组合成较大的线程安全类,如何使用线程提高并发应用程序的吞吐量,如何识别可并行执行的任务,如何提高单行程序子系统的响应能力,如何确保并发程序执行预期的任务,以及如何提高并发代码的性能和可扩展性。
最后,介绍了一些高级主题,如显式锁定、原子变量、非阻塞算法以及如何开发自定义同步工具类。
总之,本书介绍完整,原理分析透彻。我希望我的回答能帮助你。
身为一个程序员,如何优雅的结束一个线程?
感谢您的邀请
!在回答之前,让我们先看看线程的几种状态以及状态切换的过程,如下图所示(我不想画,在线盗窃):
线程退出必须是初始化后的任何状态(不包括终止状态)退出。
线程在启动后独立运行。正常情况下,他们不能在启动后进行干预。他们只能等待跑步的结束。如果他们想干预,他们只能在共享内存区域中添加一个状态标识符。实际上,JDK已经有了一个内置的状态标识符,即中断标识符。它调用中断方法,但是处于等待状态的线程将抛出中断异常,并且它可以优化add状态变量。
总结起来,有三种方法:
1。等待线程完成自己的执行(这是最优雅的,但没有讨论的意义)。
2. 调用中断方法判断中断标识。但是,在等待状态下,会抛出异常,不能认为是优雅的。示例代码如下:
3。自己添加中断状态标志。示例代码如下:
摘要:
等待状态:在此状态下,exit只能调用中断方法。
阻塞状态:有两种类型:一种是可中断的,调用中断方法退出;另一种是不可中断的,只有运行后才能退出。
就绪状态:等待CPU调度,无干预。
运行状态:添加您自己的共享状态标识符。
所以最后的“优雅退出”代码如下:
如何定位消耗CPU最多的线程?
在Linux系统下,请按照以下步骤进行检查:
top-C,显示系统运行的进程信息,输入大写P,进程将根据利用率进行排序,您可以看到第一列是进程ID,如图所示,消耗CPU最多的进程ID为5986:
top-HP 5986,显示进程的线程运行信息列表,继续输入大写p,根据CPU利用率排序,可以看到第一行,消耗CPU最多的进程ID为6021:
下一行,让我们看看你的应用程序是做什么的。如果是Java应用程序,要获得更多与线程相关的信息,可以将上面的进程ID转换为十六进制,因为在堆栈中的Jav中,存储线程的ID是十六进制的。您可以直接命令“printf”%Xn“6021”,输出:1785:
接下来,您可以通过线程ID(十六进制)查看堆栈信息。有许多工具可以查看堆栈信息。这里我使用jstack命令“jstack 5986 | grep ”0x1785 “-C5--输出如下:
通过以上步骤,您可以知道当前系统中占用CPU最多的线程以及该线程在做什么,希望能够解决这个问题。
版权声明:本文内容由互联网用户自发贡献,本站不承担相关法律责任.如有侵权/违法内容,本站将立刻删除。