多线程
实现
- 第一种
- 类继承Thread
- 重写run 方法
- 把新线程的代码写run 方法中
- 创建线程对象
- start()
- 第二种
- 定义一个类实现Runnable 接口
- 重写 run 方法
- 将要执行的方法写在 run 方法中
- Thread tr = new Thread(Runnable) 父类引用指向子类对象 多态
Runnable 原理
- Thread类的构造函数, 传递了Runnable的接口引用
- 通过init()方法 找到了传递的Target 给成员变量 Target赋值
- run 方法中有判断, 如果Target 不为null就会调用Runnable接口子类对象的run 方法
区别
- Thread
- 好处: 直接使用Thread类中的方法, 代码简短
- 弊端: 如果有了父类 就不能使用, java 是单继承
- Runnable
- 好处: 接口可以多实现
- 弊端: 不能直接使用Thread类中的方法, 需要先获取线程对象 得到Thread的方法,复杂
守护线程
setDaemon(), 设置一个线程为守护线程, 该线程不会单独执行, 当其它非守护线程都执行结束后, 此线程自动退出
加入进程
join(); 当前线程暂停, 等待指定的线程结束后. 当前线程再继续
public class Thread1 {
public static void main(String[] args) {
final Thread t1 = new Thread() {
public void run (){
for (int i = 0; i < 10; i++) {
System.out.println("aa");
}
}
};
Thread t2 = new Thread(){
public void run () {
for (int i = 0; i < 10; i++) {
if(i == 2){
try {
t1.join(); // join(ms); 方法重载 其意为 ti 插队多少毫秒 之后再交替执行
} catch (InterruptedException e) {
e.printStackTrace();
}
}
System.out.println("bb");
}
}
};
t1.start();
t2.start();
}
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
礼让线程
`yield 效果不明显
设置线程优先级
setPriority(); 范围1~10
同步代码块
synchronized