本文共 2195 字,大约阅读时间需要 7 分钟。
跟进程比较,线程的特点:
线程是程序中的一个执行流,一个执行流是由CPU运行程序代码并操作程序的数据形成的.JAVA 中的线程模型就是一个CPU、程序代码和数据的封装体.线程在JAVA 中是由 java.lang.Thread 类来定义和描述的,程序中的线程都是 Thread 的实例.
JAVA 提供了一下两创建线程的方法:
run()
.run()
.方法run()
是线程在运行时所要执行的动作,但是在执行线程过程中,并不是直接调用该方法,而是在由该类创建实例对象后,通过方法start()
来启动线程.
接口 Runnable 只有一个抽象方法run()
,在实现该接口的类中需要重写该方法.
start()
方法启动线程. 两种创建线程的方法有所区别,各有利弊.
线程本身有一些特有的属性,例如:线程标识符、线程名以及线程间的优先级属性等.通过这些属性,可以用来识别一个线程、了解线程的状态、控制线程的优先权等.
该属性为每一个线程存储了唯一的一个标识符,通过线程标识符,可以对线程进行区分.使用方法getId().
thread:this.getId()
Runnable: Thread.currentThread().getId()
每个线程默认有一个名字,默认的名字采用 Thread-1,Thread-2…形式;也可以对创建的线程设置线程名.通过getName()
可以获取线程名.
一个线程从创建、运行到终止称为一个生命周期.线程在其生命周期中要经历创建、就绪、运行、阻塞和终止5中状态.通过getState()
获取运行状态.
当一个 Thread 类或其子类使用 new 关键词声明一个对象实例时,此时线程处于创建的状态.处于创建状态的线程有自己的内存空间,但是线程还没有运行.
处于创建状态的线程通过调用start()
方法启动后,线程进入就绪状态.这时的线程就已经拥有了运行所需的所有条件,将进入线程队列等待CPU调度.由于还没有获取到CPU的时间片,所以不会立即执行.
当处于就绪状态的线程被调度,并获得CPU资源时,便进入运行状态.
Run()
方法中的操作.在某些情况下,一个正在运行的线程会让出正在使用的CPU资源,进入阻塞状态.
为了提供CPU的利,当一个线程被阻塞时,另一个线程就获得了运行的机会.
线程到达终止状态可能有几种原因:
run()
执行结束.Destory()
) 被提前终止.run()
方法执行中发生了未捕获的异常.在 JAVA 语言中,每个线程都有一个优先级,不同线程可以被赋予不同的优先级.
通过getPriority()
方法获取线程优先级,通过setPriority()
方法设置线程优先级. 线程优先级共分为10个级别,最低为1,最高为10,默认优先级为5. 前面提到的都是用户线程,另外还有一个是守护线程.两者没有什么太大不同,守护线程的唯一作用是为用户线程提供服务.
通过setDaemon()
方法,将线程设置为守护线程. 转载地址:http://cyazi.baihongyu.com/