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 官方说明相关推荐

  1. [Android]Thread线程入门3--多线程

    经过 [Android]Thread线程入门1 和[Android]Thread线程入门2 的学习,我们对线程有了简单的了解.在实际应用中,一般都会用到多线程.很少像前面的例子这么简单.那么如何实现多 ...

  2. Android SDK官方下载地址及在线SDK网址

    Android SDK官方下载地址 http://androidappdocs.appspot.com/sdk/index.html 在线SDK http://androidappdocs.appsp ...

  3. Android SDK Android NDK 官方下载地址(zt)

    Android SDK Android NDK 官方下载地址 Android SDK 3.0 Windows http://dl.google.com/android/installer_r10-wi ...

  4. 最新版的android studio,Android Studio 官方最新版下载地址(支持国内下载)

    Android Studio正式发布,给Android开发者带来了不小的惊喜.但是下载地址却不给力,国内似乎无法正常下载.这里我们在网盘上传了,可以尽情下载了哦~~~ 第一步:Android Stud ...

  5. Android SwipeRefreshLayout 官方下拉刷新控件介绍

    转载请标明出处:http://blog.csdn.net/lmj623565791/article/details/24521483 下面App基本都有下拉刷新的功能,以前基本都使用XListView ...

  6. 下一代Android或官方支持“App2sd”

    Android系统从诞生到现在的崛起经历了数个版本的更新,每次版本升级都会给大家带来新的功能和 体验,来自国外媒体的报道,众多Android用户期待的"App2sd"功能即将在下一 ...

  7. android mvvm 官方例子,详解Android的MVVM框架 - 数据绑定

    本教程是跟着 Data Binding Guide学习过程中得出的一些实践经验,同时修改了官方教程的一些错误,每一个知识点都有对应的源码,争取做到实践与理论相结合. Data Binding 解决了 ...

  8. android thread线程通讯

    参考:http://codinghard.wordpress.com/2009/05/16/android-thread-messaging/ 下载链接 源码: package sample.thre ...

  9. android 壁纸 官方网站,wallsplash - 壁纸从未如此精美 #Android

    原标题:wallsplash - 壁纸从未如此精美 #Android 壁纸的精美与否,往往直接展现了一个人的审美水准,而今天带来的这款「wallsplash 」则是一款完全遵循 Material De ...

最新文章

  1. sharp扫地机器人讲话_扫地机机器人,智能扫地机器人推荐
  2. 肝!一款基于 Python 语言的 Linux 资源监视器!
  3. navicat for mysql服务_使用Navicat for MySQL数据库连接服务器中的MySQL服务
  4. sql相同顺序法和一次封锁法_不到75行代码,导出最高法指导案例到excel(一)...
  5. 《Django实战系列》
  6. [搬运] mac下安装GDB
  7. 将xml文件打包进dll(或exe)
  8. Iperf性能测试的问题小结
  9. JAVA文件传输原理及介绍—狂神说
  10. 2018iscc 河南线下 赛题 逆向部分题解
  11. 背包DP入门笔记(1) 骨头收集 HDU-2602
  12. 微信开发者工具 http 调试
  13. Kali 中文目录改英文目录
  14. CCCC 天梯赛初赛心得
  15. vb.net 教程 20-3 控制Ie浏览器 2 获得Ie窗口的结构
  16. 华为云服务器配置教程
  17. php调用微信公众号支付接口,Thinkphp微信公众号支付接口
  18. ArcGIS问题:dbf shp shx sbn sbx mdb adf等类型的文件的解释
  19. java graphics画圆_在Java中绘制一个漂亮的圆圈
  20. 【设计】电流偏置设计

热门文章

  1. 定时器精度对性能的影响_Comet CAA-500天线分析仪 | 高精度模拟十字针同时显示SWR和阻抗...
  2. java中怎样任意跳转到指定行而不受循环语句限制
  3. java中hashcode和equals的区别和联系
  4. linux下mysql解压包安装
  5. Window setTimeout() 方法
  6. Invalid bound statement (not found)错误的可能原因分析
  7. Android开发笔记(十五)淡入淡出动画TransitionDrawable
  8. dev GridControl Column 背景色
  9. 在SpringMVC中使用拦截器(interceptor)拦截CSRF***
  10. ActiveMQ, RabbitMQ和ZeroMQ 选型关注点