在操作系统中,线程之间的执行是相互独立的,哪一个线程先执行取决于操作系统的调用。
线程的类在java.lang包下:
一、线程操作的相关方法
-
void start()
启动一个新的线程,start方法必须子线程第一个调用的方法,start不能够重复调用,新线程会调用runnable接口提供的run方法 -
void run()
run方法是子线程的执行体,子线程从进入run方法开始直至run方法执行接收意味着子线程的任务执行接收, 在主线程直接调用run方法是不能创建子线程,只是普通方法调用 -
yield()
让步或者暂停,Thread类的静态方法。让正在执行的线程停止或者让步,让给优先级较高的线程获取CPU的执行权,
(不一定会让出CPU执行权,如等待的线程优先级较低或者当前只有一个线程在执行时,
那么当先线程又会立即获取CPU的执行权)
thread.yield(), 这个线程不一定是正在执行的线程 -
sleep(long millis)
sleep方法作用是让线程进行休眠,即让线程阻塞住,Thread类提供的静态方法,会抛出 InterruptedException异常 -
join()
等待线程执行结束才继续执行.会抛出 InterruptedException异常
假如在a线程中b线程进行b.join调用,a线程等待b线程执行结束后才能继续执行,控制多线程按照次序执行 -
interrupt()
中断方法:底层调用native方法,native方法的作用是对特定标识位做修改
主要作用于线程:运行中线程、阻塞线程(sleep、join)
运行中的线程:interrupt方法仅仅是对标志位做了修改,其他没有影响
阻塞线程:interrupt方法对标志位做了修改,另阻塞中的线程感知到标志位做了修改,
就会中断当前的阻塞状态,抛出InterruptedException异常 -
isInterrupted()
判断是否发生了中断操作,返回为Boolean,true:表示发生中断 false:表示未发生中断 -
setDaemon(boolean on)
设置守护线程 ,true:设置为守护线程 false:用户线程 默认就是用户线程 -
isDaemon()
判断当前线程是否为守护线程,返回Boolean类型 true:守护线程 false:非守护线程 -
setPriority(int newPriority)
设置线程优先级,优先级分为10级,优先级数字越大,即优先级越高,优先级越高,被优先调用的概率会大
MIN_PRIORITY = 1; 最小优先级
NORM_PRIORITY= 5; 默认优先级
MAX_PRIORITY = 10; 最大优先级
int getPriority(), 返回当前程序的优先级 -
getName()/setName()
返回当前线程的名称/设置当前线程的名称 -
getId()
返回当前线程的标识符
二、用户线程和守护线程
守护线程:脱离于空中终端,作为提供通用服务的线程存在
用户线程:main方法进入主线程,可以创建启动新的线程,默认为用户线程,只有当用户线程和主线程都结束后,应用程序才终止
两者区别:
守护线程的生命周期是依赖于用户线程,当有用户线程存在,守护线程就会存活,当没有用户线程存在,那守护线程也随之消亡,垃圾回收是有单独线程来处理的,负责垃圾回收的线程就是守护线程