Java 多线程 Thread/Runnable 编程笔记
线程
| 方法 | 说明 |
|---|---|
| 继承Thread类,覆盖run方法 | 局限于一个类只能继承一个父类 |
| 实现Runnable接口 | 优点是无须继承Thread类 |
线程的主要控制办法
| 方法 | 说明 |
|---|---|
| sleep() | 线程睡眠 |
| interrupt() | 线程唤醒 |
| yield() | 线程让步 |
| stop() | 线程终止 |
| isAlive() | 线程状态测试 |
| suspend() | 线程暂停 |
| resume() | 线程恢复 |
注:sleep()方法可能会抛出异常 interruptedException
线程休眠 sleep()
public static void sleep(long millis) throws interruptedException
public static void sleep(long millis,int nanos) throws interruptedExcepion
millis为毫秒数,nanos为纳秒数
唤醒线程 interrupt()
唤醒线程的方法无外乎
- 等到线程事先设定的时间自动醒来
- 调用 interrupt() 方法
线程让步 yield()
让当前正在运行的线程退出,但让出的运行空间归给那个线程仍由操作系统分配。
线程等待 join()
已知线程 t1,t2 在 t1 中调用 t2.join(),则 t1 线程暂停执行,直到 t2 线程完成时,t1 才会恢复执行,达到 t1 线程等待的效果
void join(); // 等待该线程直到线程结束
void join(long millis); // 等待该线程终止的时间最长为 millis 毫秒
void join(long millis,long nanos); // 等待该线程终止的时间最长为 millis 毫秒+ nanos 纳秒
线程互斥与同步 Synchronized
多线程同步的基本原理
对程序中需要 同步 的语句块用 synchronized 修饰词进行同步
同步即让多个线程能够协调地 并发 执行
synchronized (obj){
//同步语句块
}
// 只有获得 obj 对象的锁,才能执行同步语句块
而同步方法
synchronized void f(){
//代码
}
后台线程 Daemon
在后台执行服务的线程,例如:
- 操作系统中的隐藏程序
- Java 的垃圾自动回收线程
注:
- 与后台线程对应的就是前台线程
- 所有使用 Thread 建立的线程默认为前台线程,例如main主线程就是一个前台线程。
在进程中
- 只要有一个前台线程未退出,进程就不会终止
- 只要所有的前台线程都已退出,该后台线程就会自动终结 (不管本身线程是否结束)
建立后台程序实例:
public class DaemonThread extends Thread{
public DaemonThread(){
setDaemon(true); //该线程设置为后台线程,若 boolean 值为 false,则是设置为前台程序
start();
}
}
判断一个线程是否为后台线程
public static void main(String [] args){
Thread thread = new Thread();
thread.isDaemon();
}
注:
- 必须在线程启动前调用 Thread 的 setDaemon()方法,否则会抛出异常,虽然这个时候线程是正常工作的,但是已经不再是守护线程
posted on 2020-05-28 12:20 CodingAnt_Ricky 阅读(109) 评论(0) 收藏 举报
浙公网安备 33010602011771号