1、thread类有一些保存信息的属性,这些属性能够用来标识线程,显示线程的状态或者控制线程的优先级。java
1.ID:保存了线程的惟一标识符编程
2.Name:保存了线程的名称并发
3.Priority:保存了线程对象的优先级。线程的优先级是从1到10,其中1是最低优先级,10是最高优先级。工具
4.Status:保存了线程的状态。线程的状态有6种:new、runnable、blocked、waiting、time waiting或者terminated。线程
2、线程的中断设计
1.Thread类中的isInterrupted()方法对象
2.Thread类的静态方法interrupted()方法接口
isInterrupted()方法和interrupted()方法的区别是:isInterrupted()方法不能改变interrupted属性的值,可是interrupted()方法能设置interrupted属性为false。由于interrupted()方法是一个静态方法,更推荐使用isInterrupted()方法。资源
3、线程的休眠rem
线程休眠能够调用Thread类的静态方法sleep(long millis),该方法参数单位为毫秒。
另一种方式是经过TimeUnit枚举类来使用Thread类的sleep()方法,可是它接收的参数单位是秒,最终被转为毫秒。
4、等待线程的终止
在一些状况下,咱们必须等待线程终止后,在执行其余任务,这时候咱们使用Thread类的join()方法。
当一个线程对象的join()方法被调用时,调用它的线程将被挂起,直到这个线程对象完成它的任务。
java提供了另外两种形式的join()方法:参数单位毫秒和纳秒
join(long milliseconds)
join(long milliseconds,long nanos)
5、守护线程
守护线程的优先级很低,一般来讲,当同一个应用程序里没有其余的线程运行时候,守护线程才运行。当守护线程是程序中惟一运行的线程时,守护线程执行结束后,JVM也就结束了这个程序。
Daemon的做用是为其余线程的运行提供便利服务,守护线程最典型的应用就是 GC (垃圾回收器),它就是一个很称职的守护者。
User和Daemon二者几乎没有区别,惟一的不一样之处就在于虚拟机的离开:若是 User Thread已经所有退出运行了,只剩下Daemon Thread存在了,虚拟机也就退出了。 由于没有了被守护者,Daemon也就没有工做可作了,也就没有继续运行程序的必要了。
值得一提的是,守护线程并不是只有虚拟机内部提供,用户在编写程序时也能够本身设置守护线程。下面的方法就是用来设置守护线程的。
Thread daemonTread = new Thread();
// 设定 daemonThread 为 守护线程,default false(非守护线程)
daemonThread.setDaemon(true);
// 验证当前线程是否为守护线程,返回 true 则为守护线程
daemonThread.isDaemon();
setDaemon()方法只能在start()方法被调用以前设置。一旦线程开始运行,将不能再修改守护状态。
isDaemon()方法被用来检查一个线程是否是守护线程,返回值为true表示这个线程是守护线程,false表示这个线程是用户线程。
6、线程局部变量的使用
ThreadLocal为每一个使用该变量的线程分配一个独立的变量副本。因此每个线程均可以独立地改变本身的副本,而不会影响其余线程所对应的副本。
一、ThreadLocal不是线程,是线程的一个变量,你能够先简单理解为线程类的属性变量。
二、ThreadLocal在类中一般定义为静态变量。
三、每一个线程有本身的一个ThreadLocal,它是变量的一个“拷贝”,修改它不影响其余线程。
ThreadLocal适用于资源共享但不须要维护状态的状况,也就是一个线程对资源的修改,不影响另外一个线程的运行;这种设计是‘空间换时间’,synchronized顺序执行是‘时间换取空间’。
四个核心方法说明以下:
T get():返回此线程局部变量的当前线程副本中的值。
protected T initialValue():返回此线程局部变量的当前线程的“初始值”。
void remove():移除此线程局部变量当前线程的值。
void set(T value):将此线程局部变量的当前线程副本中的值设置为指定值。
7、线程的分组
Java Concurrent API中提供了对线程进行分组管理的ThreadGroup,使得咱们能够将多个线程看做一个单元,对这些线程执行操做,如中断一组线程等。
ThreadGroup类有不少方法,它的API文档提供了全部的方法的完整解释。
8、线程工厂类
工厂模式是面向对象编程中最常使用的模式之一。它是一个建立者模式,使用一个类为其余的一个或者多个类建立对象。当咱们要为这些类建立对象时,不需再使用new构造器,而使用工厂类。使用工厂类,能够将对象的建立集中化,这样作有如下的好处:一、更容易修改类,或者改变建立对象的方式;二、更容易为有限资源限制建立对象的数目。例如,咱们能够限制一个类型的对象很少于n个。三、更容易为建立的对象生成统计数据。Java提供了ThreadFactory接口,这个接口实现了线程对象工厂。Java并发API的高级工具类也使用了线程工厂建立线程。