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线程。

Android Thread 官方说明的更多相关文章

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

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

  2. Android Thread Handler UIHandler demos

    extends:http://blog.csdn.net/superjunjin/article/details/7540064 序效果:为了显示如何用message传值的简单例子 例1,点击按钮,持 ...

  3. Android 使用官方下拉刷新

    网上关于下拉刷新的文章也不少,不过都太长了,看得挺难受的.恰好发现了官方的下拉刷新库,而且效果还是不错的,简洁美观,用得也挺方便. 下面是效果图: 我的好友原来是空的,刷新后多了两个. 使用还是挺方便 ...

  4. NDK(5) Android JNI官方综合教程[JavaVM and JNIEnv,Threads ,jclass, jmethodID, and jfieldID,UTF-8 and UTF-16 Strings,Exceptions,Native Libraries等等]

    JNI Tips In this document JavaVM and JNIEnv Threads jclass, jmethodID, and jfieldID Local and Global ...

  5. android Thread和Runable区别,精讲(有疑问)

    网上总是说Runable和Thread可以实现线程,这导致我对Thread和Runable有错误的理解,谁让当时不求甚解,让我一直以为实现Runable可以开启线程. 看过源码后进行区分这两者. 无论 ...

  6. Android Thread.UncaughtExceptionHandler捕获

    在Java 的异常处理机制中:如果抛出的是Exception异常的话,必须有try..catch..进行处理,属于checked exception.如果抛出的是RuntimeException异常的 ...

  7. Android Thread和AsyncTask

    1. 线程Thread 2. 异步任务AsyncTask ------------------------------------------------- --------------------- ...

  8. android Bluetooth(官方翻译)

    Bluetooth Using the Bluetooth APIs, an Android application can perform the following: 使用蓝牙APIs,一个And ...

  9. Android之官方导航栏之Toolbar(Toolbar+DrawerLayout+ViewPager+PagerSlidingTabStrip)

    通过前几篇文章,我们对Android的导航栏有了一定的了解认识,本次文章将对Toolbar进行综合应用,主要结合DrawerLayout.ViewPager.PagerSlidingTabStrip一 ...

随机推荐

  1. 微服务架构下分布式事务解决方案——阿里GTS

    1 微服务的发展 微服务倡导将复杂的单体应用拆分为若干个功能简单.松耦合的服务,这样可以降低开发难度.增强扩展性.便于敏捷开发.当前被越来越多的开发者推崇,很多互联网行业巨头.开源社区等都开始了微服务 ...

  2. SonarQube 集成 GitLabCI

    本文是用于分析SonarQube代码的质量,每次在GitLab上提交代码时都使用GitLab-CI运行器进行检查. 1.SonarQube with GitLab 安装插件GitLab-plugin ...

  3. NET Core 1.1中使用Jwt

    NET Core里Jwt的生成倒是不麻烦,就是要踩完坑才知道正确的生成姿势…… Jwt的结构 jwt的结构是{Header}.{Playload}.{Signature}三截.其中Header和Pla ...

  4. CSS实例详解:Flex布局

    本文由云+社区发表 本文将通过三个简单的实例,实际应用上篇文章的基础理论知识,展示下Flex布局是如何解决CSS布局问题. 一.垂直居中 这里同时用非flex布局和flex布局两种方式来实现,可以对比 ...

  5. 利用反射跟自定义注解拼接实体对象的查询SQL

    前言 项目中虽然有ORM映射框架来帮我们拼写SQL,简化开发过程,降低开发难度.但难免会出现需要自己拼写SQL的情况,这里分享一个利用反射跟自定义注解拼接实体对象的查询SQL的方法. 代码 自定义注解 ...

  6. 面试问烂的 Spring AOP 原理、SpringMVC 过程(求求你别问了)

    Spring AOP ,SpringMVC ,这两个应该是国内面试必问题,网上有很多答案,其实背背就可以.但今天笔者带大家一起深入浅出源码,看看他的原理.以期让印象更加深刻,面试的时候游刃有余. Sp ...

  7. 【转载】C#防SQL注入过滤危险字符信息

    不过是java开发还是C#开发或者PHP的开发中,都需要关注SQL注入攻击的安全性问题,为了保证客户端提交过来的数据不会产生SQL注入的风险,我们需要对接收的数据进行危险字符过滤来防范SQL注入攻击的 ...

  8. asp.net core 依赖注入几种常见情况

    先读一篇注入入门 全面理解 ASP.NET Core 依赖注入, 学习一下基本使用 然后学习一招, 不使用接口规范, 直接写功能类, 一般情况下可以用来做单例. 参考https://www.cnblo ...

  9. C# Redis安装 使用教程

    前言:lz自打工作以来第一次遇到电脑问题需要重装系统,全盘格式化.打击是沉痛的.特别伤.  然后需要重新在本地部署 redis.这是写这篇博客的原因.希望对大家有所帮助,安装资源和引用DLL可以引用 ...

  10. ubuntu 16.04服务器 搭建php LAMP环境

    1.安装Apache 下载目录: sudo apt update 安装程序: sudo apt install apache2 检查是否安装成功: sudo systemctl status apac ...