Android Thread 官方说明
Thread官方说明
https://developer.android.google.cn/reference/java/lang/Thread
Thread是程序中执行的线程。Java虚拟机允许应用程序同时运行多个执行线程。
每个线程都可设置优先级别。优先级别高的线程优先于优先级别低的线程执行。线程可能是守护进程(Daemon),也可能是非守护进程(Non-daemon)。当在某个线程的代码中创建一个新的Thread对象时,新线程的优先级初始设置等于创建线程的优先级,并且当且仅当创建线程是守护进程时新的Thread才是守护进程线程。
当Java虚拟机启动时,通常会有一个非守护线程(通常会调用某个指定类的main方法)。Java虚拟机将继续执行线程,直到出现以下任一情况:
- Runtime类的exit方法已经被调用并且安全管理器允许退出操作发生。
- 所有非守护线程已经退出,或者通过调用run方法返回或通过抛出一个run方法的异常。
有两种方法可以创建一个新的执行线程。一种是将一个类声明为Thread的子类。这个子类应该重写Thread类的run方法。然后可以分配和启动子类的一个实例。例如,计算大于某个值的素数的线程:
class PrimeThread extends Thread {long minPrime;PrimeThread(long minPrime) {this.minPrime = minPrime;}public void run() {// compute primes larger than minPrime . . .} }
下面的代码会创建一个线程并执行:
PrimeThread p = new PrimeThread(143); p.start();
另一种创建线程的方式是声明一个实现了Runnable接口的类,然后实现了run方法。 然后可以分配一个类的实例,在创建线程时作为参数传递,然后启动线程。 示例如下:
class PrimeRun implements Runnable {long minPrime;PrimeRun(long minPrime) {this.minPrime = minPrime;}public void run() {// compute primes larger than minPrime . . .} }
下面的代码会创建一个线程并开始执行:
PrimeRun p = new PrimeRun(143); new Thread(p).start();
每个线程都有一个用于标识的名称。 多个线程可能具有相同的名称。 如果在创建线程时未指定名称,则系统会自动为其生成新名称。除非另有说明,否则将null参数传递给此类中的构造函数或方法将导致抛出NullPointerException。
守护线程(daemon)和用户线程(User Thread)
所谓守护线程就是运行在程序后台的线程,程序的主线程Main(比方java程序一开始启动时创建的那个线程)不会是守护线程 。Daemon thread在Java里面的定义是,如果虚拟机中只有Daemon thread 在运行,则虚拟机退出。通常Daemon线程用来为User线程提供某些服务。程序的main()方法线程是一个User线程,User线程创建的线程为User线程。当所有的Non-daemon线程结束后,JVM才会结束。
通过在一个线程对象上调用setDaemon(true),可以将user线程创建的线程明确地设置成Daemon线程。例如,时钟处理线程、idle线程、垃圾回收线程、屏幕更新线程等,都是Daemon线程。通常新创建的线程会从创建它的线程哪里继承daemon状态,除非明确地在线程对象上调用setDaemon方法来改变daemon状态。
需要注意的是,setDaemon()方法必须在调用线程的start()方法之前调用。一旦一个线程开始执行(如,调用了start()方法),它的daemon状态不能再修改。通过方法isDaemon()可以知道一个线程是否Daemon线程。
总之,必须等所有的Non-daemon线程都运行结束了,只剩下daemon的时候,JVM才会停下来,注意Main主程序是Non-daemon线程,默认产生的线程全部是Non-daemon线程。
转载于:https://www.cnblogs.com/elvischiu/p/8976234.html
Android Thread 官方说明相关推荐
- [Android]Thread线程入门3--多线程
经过 [Android]Thread线程入门1 和[Android]Thread线程入门2 的学习,我们对线程有了简单的了解.在实际应用中,一般都会用到多线程.很少像前面的例子这么简单.那么如何实现多 ...
- Android SDK官方下载地址及在线SDK网址
Android SDK官方下载地址 http://androidappdocs.appspot.com/sdk/index.html 在线SDK http://androidappdocs.appsp ...
- Android SDK Android NDK 官方下载地址(zt)
Android SDK Android NDK 官方下载地址 Android SDK 3.0 Windows http://dl.google.com/android/installer_r10-wi ...
- 最新版的android studio,Android Studio 官方最新版下载地址(支持国内下载)
Android Studio正式发布,给Android开发者带来了不小的惊喜.但是下载地址却不给力,国内似乎无法正常下载.这里我们在网盘上传了,可以尽情下载了哦~~~ 第一步:Android Stud ...
- Android SwipeRefreshLayout 官方下拉刷新控件介绍
转载请标明出处:http://blog.csdn.net/lmj623565791/article/details/24521483 下面App基本都有下拉刷新的功能,以前基本都使用XListView ...
- 下一代Android或官方支持“App2sd”
Android系统从诞生到现在的崛起经历了数个版本的更新,每次版本升级都会给大家带来新的功能和 体验,来自国外媒体的报道,众多Android用户期待的"App2sd"功能即将在下一 ...
- android mvvm 官方例子,详解Android的MVVM框架 - 数据绑定
本教程是跟着 Data Binding Guide学习过程中得出的一些实践经验,同时修改了官方教程的一些错误,每一个知识点都有对应的源码,争取做到实践与理论相结合. Data Binding 解决了 ...
- android thread线程通讯
参考:http://codinghard.wordpress.com/2009/05/16/android-thread-messaging/ 下载链接 源码: package sample.thre ...
- android 壁纸 官方网站,wallsplash - 壁纸从未如此精美 #Android
原标题:wallsplash - 壁纸从未如此精美 #Android 壁纸的精美与否,往往直接展现了一个人的审美水准,而今天带来的这款「wallsplash 」则是一款完全遵循 Material De ...
最新文章
- sharp扫地机器人讲话_扫地机机器人,智能扫地机器人推荐
- 肝!一款基于 Python 语言的 Linux 资源监视器!
- navicat for mysql服务_使用Navicat for MySQL数据库连接服务器中的MySQL服务
- sql相同顺序法和一次封锁法_不到75行代码,导出最高法指导案例到excel(一)...
- 《Django实战系列》
- [搬运] mac下安装GDB
- 将xml文件打包进dll(或exe)
- Iperf性能测试的问题小结
- JAVA文件传输原理及介绍—狂神说
- 2018iscc 河南线下 赛题 逆向部分题解
- 背包DP入门笔记(1) 骨头收集 HDU-2602
- 微信开发者工具 http 调试
- Kali 中文目录改英文目录
- CCCC 天梯赛初赛心得
- vb.net 教程 20-3 控制Ie浏览器 2 获得Ie窗口的结构
- 华为云服务器配置教程
- php调用微信公众号支付接口,Thinkphp微信公众号支付接口
- ArcGIS问题:dbf shp shx sbn sbx mdb adf等类型的文件的解释
- java graphics画圆_在Java中绘制一个漂亮的圆圈
- 【设计】电流偏置设计
热门文章
- 定时器精度对性能的影响_Comet CAA-500天线分析仪 | 高精度模拟十字针同时显示SWR和阻抗...
- java中怎样任意跳转到指定行而不受循环语句限制
- java中hashcode和equals的区别和联系
- linux下mysql解压包安装
- Window setTimeout() 方法
- Invalid bound statement (not found)错误的可能原因分析
- Android开发笔记(十五)淡入淡出动画TransitionDrawable
- dev GridControl Column 背景色
- 在SpringMVC中使用拦截器(interceptor)拦截CSRF***
- ActiveMQ, RabbitMQ和ZeroMQ 选型关注点