Java多线程与并发01: Thread & Runnable

通过Runnable创建线程

 

可以通过匿名内部类创建接口实例:

Java多线程与并发01: Thread & Runnable_第1张图片

也可以使用lambda表达式:

然后传入Thread的构造器,构造线程:

 

继承Thread类创建线程

 

Java多线程与并发01: Thread & Runnable_第2张图片

继承Thread,重写run方法,注意,没有输入参数,也没有返回值。

 

线程的名称

 

可以通过构造器,传入线程的名称,然后通过getName()获取名称

也可以使用setName()设置名称

 

线程的状态

 

判断是否存在:

线程的状态:

枚举 含义
NEW 刚刚完成创建
RUNNABLE 可执行,线程还没获得时间片
BLOCKED 等待锁
WAITING 其他线程没有释放信号,一直等
TIMED_WAITING 其他线程没有释放信号,等待一定的时长
TERMINATED 线程终止

可以使用getState()获取状态:

 

线程的优先级

 

可以通过getPriority和setPriority获取或设置线程的优先级:

 

守护进程线程和非守护进程线程

 

可以通过isDaemon获取是否为守护进程线程:

可以通过setDaemon设置守护进程线程:

守护线程与非守护线程的区别:

守护线程不会保证正常执行完毕,一旦非守护线程完全退出,则守护线程退出。

而非守护线程是保证执行完毕的,否则不会退出。

java的默认是非守护线程。

 

举个例子:

Java多线程与并发01: Thread & Runnable_第3张图片

默认情况下是非守护线程,你会发现,控制台打印到9999才会退出。

 

然后,当设置为守护线程后,t线程刚刚执行就结束了,控制台推出。

Java多线程与并发01: Thread & Runnable_第4张图片

 

还可以怎么最保证t线程打印完再退出呢?使用join

Java多线程与并发01: Thread & Runnable_第5张图片

 

 

启动线程

 

可以使用start()方法启动线程,当线程已经停止,或者正在运行,将会抛出异常。IllegalThreadStateException

 

终止线程

 

使用interrupt()方法终止线程,但是在线程sleep或join时,会抛出InterruptedException异常

isInterrupted()可以用来判断是否终止了线程。

Thread.interrupted()方法会检查是否终止线程,是一个静态方法,但是会清除标志。

 

Java多线程与并发01: Thread & Runnable_第6张图片

 

等待线程

 

调用方调用被调用的线程的join方法,可以让当前的线程停下来等待被调用join的线程运行直到结束。

当有其他线程中断了这个等待的线程,将会触发InterruptedException

join的几个重载函数:

join()无限期等待

join(long millis)等待一段时间,输入0则等同于无限期等待

 

使用示例,主线程一直等待运行结束才会关闭。

Java多线程与并发01: Thread & Runnable_第7张图片

 

线程睡眠

 

使用sleep方法可以让线程暂停一会儿。

sleep(long millis)

当有其他线程中断本线程,会抛出InterruptedException

Java多线程与并发01: Thread & Runnable_第8张图片

Java多线程与并发01: Thread & Runnable_第9张图片

 

 

 

 

你可能感兴趣的:(多线程与并发)