多线程系列 - 基础篇01 - 线程基本概念 & 线程优先级 & 守护线程 60%
1.什么是线程
将线程理解为轻量级进程,它与进程的最大的区别是:
多个线程共享一个进程资源;
对于OS的许多资源的分配和管理(如内存)通常都是进程级别的,线程只是os调度的最小单位;
相对于进程来说更轻量,上下文信息更少,创建、销毁更简单,若线程被挂起,不会导致整个进程被挂起。
2.在java中如何使用线程
- 实现Runnable接口,然后通过new Thread(new RunnableImpl()).start();创建线程。
public interface Runnable {
public abstract void run();
}
- 继承Thread类(Thread类自身实现了Runnable接口), new MyThread().start()创建线程。
start()方法是怎么启动线程的? - 摘自《java特种兵》 实现方式1
基于Kernel Thread(KLT)的映射来实现:KLT是内核线程,内核线程由OS直接完成调度切换,它相对应用程序的线程来讲只是一个借口,
外部程序会使用一种轻量级进程(Light Weight Process, LWP)来与KLT进行一对一的借口调用。
也就是说,进程内部会尝试利用OS的内核线程去参与实际的调度,而自己使用API调用作为中间桥梁与自己的程序交互。
3.JAVA中线程的状态
- NEW (执行 start()之前,需注意:调用了start()并不代表状态立即改变,中间还有一些步骤,要看那些中间步骤是否已经完成了)
- RUNNABLE (可以理解为活着并尝试征用CPU)
- BLOCKED(阻塞状态,或者说线程已被挂起, 是在多个线程有同步操作的场景, 比如正在等待另一个线程的synchronized 块的执行释放, 或者可重入的 synchronized块里别人调用wait() 方法, 也就说线程在等待进入临界区)
- WAITING (一个线程拥有锁对象后,执行wait()方法)
- TIMED_WAITING (sleep()之后进入此状态)
- TERMINATED (run()方法执行结束后就处于此状态,在操作系统内部可能已经注销了相应的线程,活着将它复用给其他需要使用线程的请求)
4.线程优先级
cpu的资源是有限的,在某些情况下,我们可以设置线程的优先级,让OS根据不同的优先级进行调度
线程调度的优先级,每个OS都有不同的实现,java虚拟机为了兼容各种OS设定了1-10个优先级,理论上数字越大,优先级越高。
而某些OS可能只有3-5个线程,那么jvm会根据实际情况将 1-10这10个数字与OS的线程优先级做一个映射关系。
那么思考一下,很有可能 优先级3 和 优先级5 在OS中是同一个优先级。
java中通过setPriority(int)方法来设置一个线程的优先级。 在实际工作中,通常将优先级设置为普通(5,默认),最大(10),最小(1)。
5.守护线程
java中有两类线程 User Thread 和 Daemon Thread
守护线程--也称“服务线程”,在没有用户线程可服务时会自动离开。(GC 即为一个守护线程)
java中通过setDaemon(true) 将一个线程设置为守护线程,但是需注意两点
1.thread.setDaemon(true)必须在thread.start()之前设置,否则将会抛出IllegalThreadStateException异常
2.在Daemon线程中产生的新线程也是Daemon的
Thread中setDaemon实现
public final void setDaemon(boolean on) {
checkAccess();
if (isAlive()) {
throw new IllegalThreadStateException();
}
daemon = on;
}
多线程系列 - 基础篇01 - 线程基本概念 & 线程优先级 & 守护线程 60%的更多相关文章
- Java多线程系列--“基础篇”01之 基本概念
多线程是Java中不可避免的一个重要主体.从本章开始,我们将展开对多线程的学习.接下来的内容,是对“JDK中新增JUC包”之前的Java多线程内容的讲解,涉及到的内容包括,Object类中的wait( ...
- Java多线程系列 基础篇01 线程的状态
1.进程和线程 进程: 计算机中程序关于某数据集合的一次运行活动,是计算机系统进行资源分配和调度的基本单位,是操作系统结构的基础. 线程: 线程是进程的实例,是CPU进行资源分配和调度的最小单位,线程 ...
- Java多线程系列--“基础篇”05之 线程等待与唤醒
概要 本章,会对线程等待/唤醒方法进行介绍.涉及到的内容包括:1. wait(), notify(), notifyAll()等方法介绍2. wait()和notify()3. wait(long t ...
- Java多线程系列--“基础篇”06之 线程让步
概要 本章,会对Thread中的线程让步方法yield()进行介绍.涉及到的内容包括:1. yield()介绍2. yield()示例3. yield() 与 wait()的比较 转载请注明出处:ht ...
- Java多线程系列--“基础篇”07之 线程休眠
概要 本章,会对Thread中sleep()方法进行介绍.涉及到的内容包括:1. sleep()介绍2. sleep()示例3. sleep() 与 wait()的比较 转载请注明出处:http:// ...
- Java多线程系列--“基础篇”09之 interrupt()和线程终止方式
概要 本章,会对线程的interrupt()中断和终止方式进行介绍.涉及到的内容包括:1. interrupt()说明2. 终止线程的方式2.1 终止处于“阻塞状态”的线程2.2 终止处于“运行状态” ...
- Java多线程系列--“基础篇”10之 线程优先级和守护线程
概要 本章,会对守护线程和线程优先级进行介绍.涉及到的内容包括:1. 线程优先级的介绍2. 线程优先级的示例3. 守护线程的示例 转载请注明出处:http://www.cnblogs.com/skyw ...
- Java多线程系列--“基础篇”11之 生产消费者问题
概要 本章,会对“生产/消费者问题”进行讨论.涉及到的内容包括:1. 生产/消费者模型2. 生产/消费者实现 转载请注明出处:http://www.cnblogs.com/skywang12345/p ...
- Java多线程系列--“基础篇”04之 synchronized关键字
概要 本章,会对synchronized关键字进行介绍.涉及到的内容包括:1. synchronized原理2. synchronized基本规则3. synchronized方法 和 synchro ...
随机推荐
- Web运行控制台输出乱码解决总结
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...
- 安装和使用phpstorm
下载网址:https://www.jetbrains.com/phpstorm/ 第一步:解压在官网上所下的文件,双击 Phpstorm10.0.3.exe 第二步:安装目录选择,自定义选择安装目录, ...
- JavaScript的进阶之路(四)理解对象1
对象是JavaScript的基本数据类型.简单的名值对组成了对象,BUT:还可以从一个被称为原型的对象继承属性,对象的方法通常就是继承的属性. 对象最常见的用法有:创建.设置.查找.删除.检测.枚举它 ...
- 支持n多视频网站的下载,推荐 you-get
其实刚开始是想下载youtube视频, 网上找了下 其中之一:http://jingyan.baidu.com/article/39810a23d2deb2b637fda66c.html 访问一个在线 ...
- How to fix Mysql table crashes
Whenever you enconter this: Please use mysql_upgrade to fix this error. or using mysql_upgrade -u r ...
- Angular1.x 基础总结
官方文档:Guide to AngularJS Documentation w3shools angularjs教程 wiki <AngularJS权威教程> Introd ...
- winform界面开发-HTML内容编辑控件
参照及推荐博客:伍华聪 http://www.cnblogs.com/wuhuacong/archive/2009/07/07/1518346.html http://www.cnblogs.com/ ...
- 安装系统+数据库+Sharepoint全套教程 (摘抄自https://www.cnblogs.com/jianyus/p/5482075.html)
前言 SharePoint 2016如约而至,之前也装过预览版,但是这次是正式版,还是分享一个完整的安装过程给大家,希望能给有需要的人有所帮助. 1.首先安装操作系统,我这里是Windows Serv ...
- Ajax学习---Ajax基础学习 180128
AJAX AJAX(Asynchronous Javascript And XML)翻译成中文就是“异步Javascript和XML”.即使用Javascript语言与服务器进行异步交互,传输的数据为 ...
- 89C51单片机的学习
好久都没来写一些东西了 最近老是忙着玩了,都忘记认真学习了. 大概从明天开始就要开始忙了. 1,英语四级 2,单片机课程 3,安卓课程 4,PS 感觉事情好多. 但是我还是心不在焉.好奇怪. 反正就是 ...