多线程

实现

  • 第一种
    1. 类继承Thread
    2. 重写run 方法
    3. 把新线程的代码写run 方法中
    4. 创建线程对象
    5. start()
  • 第二种
    1. 定义一个类实现Runnable 接口
    2. 重写 run 方法
    3. 将要执行的方法写在 run 方法中
    4. Thread tr = new Thread(Runnable) 父类引用指向子类对象 多态

Runnable 原理

  1. Thread类的构造函数, 传递了Runnable的接口引用
  2. 通过init()方法 找到了传递的Target 给成员变量 Target赋值
  3. 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

礼让线程

`yield 效果不明显

设置线程优先级

setPriority(); 范围1~10

同步代码块

synchronized

Last Updated: 8/4/2020, 6:23:45 PM