创建线程的两种方法:
- 继承Thread,Thread也实现了Runnable
- 实现Runnable
java线程的特征和状态
- 所有的Java 程序,不论并发与否,都有个名为主线程的Thread 对象。执行该程序时, Java虚拟机( JVM )将创建一个新Thread 并在该线程中执行main()方法。这是非并发应用程序中唯一的线程,也是并发应用程序中的第一个线程
- Java中的线程共享应用程序中的所有资源,包括内存和打开的文件,快速而简单地共享信息。但是必须使用同步避免数据竞争。
- Java中的所有线程都有一个优先级,这个整数值介于Thread.MIN_PRIORITY(1)和Thread.MAX_PRIORITY(10)之间,默认优先级是Thread.NORM_PRIORITY(5)。线程的执行顺序并没有保证,通常,较高优先级的线程将在较低优先级的钱程之前执行。
- 在Java 中,可以创建两种线程:守护线程。非守护线程。
区别在于它们如何影响程序的结束。Java程序结束执行过程的情形:- 程序执行Runtime类的exit()方法, 而且用户有权执行该方法。
- 应用程序的所有非守护线程均已结束执行,无论是否有正在运行的守护线程。
守护线程通常用在作为垃圾收集器或缓存管理器的应用程序中,执行辅助任务。在线程start之前调用isDaemon()方法检查线程是否为守护线程,也可以使用setDaemon()方法将某个线程确立为守护线程
- Thread.States类中定义线程的状态如下:
- NEW:Thread对象已经创建,但是还没有开始执行。
- RUNNABLE:Thread对象正在Java虚拟机中运行。
- BLOCKED : Thread对象正在等待锁定。
- WAITING:Thread 对象正在等待另一个线程的动作。
- TIME_WAITING:Thread对象正在等待另一个线程的操作,但是有时间限制。
- TERMINATED:Thread对象已经完成了执行。
getState()方法获取Thread对象的状态,可以直接更改线程的状态。
Thread类和Runnable 接口
- Runnable接口只定义了一种方法:run()方法。这是每个线程的主方法。当执行start()方法启动新线程时,它将调用run()方法。
- Thread其他常用方法
- interrupt():中断目标线程,给目标线程发送一个中断信号,线程被打上中断标记。
- sleep(long ms):该方法将线程的执行暂停ms时间。
- join():暂停线程的执行,直到调用该方法的线程执行结束为止。可以使用该方法等待另一个
- Thread对象结束。
Callable
Callable 接口是一个与Runnable 接口非常相似的接口。Callable 接口的主要特征如下。
- 接口。有简单类型参数,与call()方法的返回类型相对应。
- 声明了call()方法。执行器运行任务时,该方法会被执行器执行。它必须返回声明中指定类型的对象。
- call()方法可以抛出任何一种校验异常。可以实现自己的执行器并重载afterExecute()方法来处理这些异常。
网友评论