1.进程、线程、多线程

  • 进程包含多个线程,进程相当于保护伞,将多个线程组合在一起,例如视频,包含着声音、动画等线程。
  • 线程:多个线程中有一个主线程(main)

联系:程序运行起来形成进程,进程中又有若干线程,最终执行起来的是线程。

2.线程的创建

A。继承Thread类(重点)

B。实现Runnable接口(重点)


  • 两个小结,比较

  • 问题:当多个线程操作同一个资源的情况下,线程不安全,数据紊乱。(可以使用并发来实现

  • 例子:龟兔赛跑

package test;

public class Test implements Runnable {
    // 胜利者
    private static String winner;

    @Override
    public void run() {
        for (int i = 0; i <= 100; i++) {
            if (Thread.currentThread().getName().equals("兔子")){
                try {
                    Thread.sleep(10);
                } catch (InterruptedException e) {
                    e.printStackTrace();
                }
            }
            boolean flag = getWinner(i);
            
            if (flag){
                break;
            }
            System.out.println(Thread.currentThread().getName() + "跑了" + i + "步");
        }
    }
    // 判断谁是胜利者
    public boolean getWinner(int steps){
        if (winner != null){
            return true;
        }
        if (steps >= 100){
            winner = Thread.currentThread().getName();
            System.out.println("胜利者是" + winner);
            return true;
        }
        return false;
    }

    public static void main(String[] args) {
        Test test = new Test();
        new Thread(test,"兔子").start();
        new Thread(test,"乌龟").start();
    }
}

C。实现Callable接口(了解)

3. 静态代理模式

总结

  • 真实对象和代理对象都要实现同一个接口
  • 代理对象要代理真实的角色

例子:婚庆公司

​ 新郎只需进行结婚,即实现结婚接口,做新郎该做的事。

​ 婚庆公司代理新郎布置现场,即实现结婚接口,婚前做现场布置,然后新郎结婚,最后进行费用的收取。

​ 以往是直接new一个对象来直接调用新郎的实现类,如今是通过new一个对象,通过婚庆公司的类来进行代理完成任务。

优点

  • 代理对象可以做很多真实对象做不了的事情
  • 真实对象只需要专注做自己的事情

4.线程状态

  • 创建状态
  • 就绪状态:启动线程进入就绪状态、运行状态释放CPU资源进入就绪状态
  • 阻塞状态:阻塞解除进入就绪状态运行状态等待用户输入线程休眠等操作进入阻塞状态
  • 运行状态:阻塞状态获取CPU资源进入运行状态
  • 死亡状态:运行状态线程自然执行完毕,外部干涉终止线程进入死亡状态

A。线程停止

B。线程休眠

C。 线程礼让

D。合并线程

E。线程状态观测

F。线程优先级

H。守护线程

5.线程同步(队列+锁)

  • 并发:同一个对象被多个线程同时操作

6.死锁

7。锁

posted on 2022-02-24 15:33  胡太白  阅读(82)  评论(0)    收藏  举报