《java多线程编程实战指南》——第一章笔记

java.lang.Thread

1、线程属性:编号(ID-long,只读)、名称(Name-String,)、线程类别(Daemon-boolean:true为守护线程,false为用户线程)、优先级(Priority-int)

2、常用方法:start() 启动线程;run() 实现线程的任务处理逻辑;join() 等待相应线程运行结束;currentThread() 返回当前线程,即代码的执行线程(对象);yield() 使当前线程主动放弃其对处理器的占有,这可能导致当前线程被暂停; sleep(long millis) 使当前线程休眠(暂停运行)指定时间。

任务

1、特定的线程总是在执行特定的任务

2、线程的run方法是线程的任务处理逻辑的入口方法

创建线程的方法

1、创建Thread子类的run方法中直接实现任务处理逻辑;

2、以Runnable接口实例为构造器参数直接new创建Thread实例。(优先选择)

线程与代码直接的关系

1、任何一段代码都是运行在确定的线程之中

2、同一段代码可以被多个线程执行

3.代码可以通过调用Thread.currentThread()来获取其当前执行线程

线程层次关系

1、父线程子线程只是便于称呼的一种相对概念

2、java平台中并没有API用于获取一个线程的父线程或者获取一个线程的所有子线程

3、父线程子线程之间的生命周期相对独立

线程状态

1、新建而未运行:NEW

2、可被调度运行或者正在运行:RUNNABLE 包含;两个子状态 READY 和 RUNNING

3、阻塞:BLOCKED

4、等待:WAITING、TIMED_WAITING

5、结束:TERMINATED

线程的监视

1、获取与查看线程转储(Thread Dump)

2、工具

    2.1、平台无关

        方法1:执行命令: jstack -l PID(java程序的进程ID),windows可用jps命令获取,Linux可用ps获取;

        方法2:单击图形化工具jvisualvm中的Thread Dump按钮,jdk主目录/bin/jvisualvm。jdk11貌似没有。

        方法3:单击图形化工具Java Mission Control (JMC),jdk主目录/bin/jmc。jdk11貌似没有。

    2.2、特定于Linux

        方法4:执行命令:kill -3 PID

        方法5:在启动Java程序的控制台按下“CTRL+\”组合键

    2.3、特定于Windows

        方法6:在启动Java程序的命令行提示窗口中按下“CTRL+Break”组合键;笔记本键盘找不到Break键。

无处不在的线程

main线程、垃圾回收线程、Web服务器请求处理线程、JIT(Just In Time)即时编译线程

多线程的优势和风险

优势

1、提高系统的吞吐率

2、提高响应性

3、充分利用多核处理器资源

4、最小化对系统资源使用

5、简化程序的结构

风险

1、线程安全问题

2、线程的活性(Liveness)问题

3、上下文切换

4、可靠性

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容