关于线程和多线程的理解

多线程

简单来说,在程序中开辟多条线,同时进行,同时处理,以提高效率。

进程与线程

操作系统中的程序称之为进程。

process 进程

比方说在windows中存在qq和视频播放器(两个进程)

进程是系统开辟的,只是一个动态概念。真正有用的是其中的线程。

thread 线程

在视频播放器中存在这声音,字幕,图像(多个线程)

创建线程的三种方式

  1. 继承Thread 类 启动方式:子对象.start()

     TestThread2 testThread2 = new TestThread2("https://lmg.jj20.com/up/allimg/tp06/201111095104AM-0-lp.jpg", "wenjan");
    testThread2.start()
    
  2. 实现Runnable接口 启动方式:传入目标对象 进入thread对象.start() ;;

 TestThread2 testThread2 = new TestThread2("https://lmg.jj20.com/up/allimg/tp06/201111095104AM-0-lp.jpg", "wenjan");
new Thread(testThread2).start()

以接口的方式避免了java语言中继承的局限性,灵活,方便同一个对象被多个线程使用

  1. 实现Callable接口

    Callable可以自定义线程的返回值,可以抛出异常,采用创建线程池的方法进行实现

执行

线程开启不一定立即执行,由cpu调度执行,(同时执行)

多线程同步问题

当存在多个线程同时操作一个资源的情况下,线程是不安全的,数据会出现错误和紊乱

关于代理的理解

public class Marry {
    public static void main(String[] args) {
        WeddingComponey weddingComponey = new WeddingComponey( new You());
        weddingComponey.happyMarr();

    }
}

    interface  Marry2{
        void happyMarr();

    }
    class You implements Marry2{
        @Override
        public void happyMarr() {
            System.out.println("恭喜恭喜");
        }
    }
    class  WeddingComponey implements Marry2{
        private Marry2 marry2;

        public WeddingComponey(Marry2 marry2) {
           this.marry2=marry2;
        }
        @Override
        public void happyMarr() {
            befor();
            this.marry2.happyMarr();
            after();

        }
        private  void  befor(){
            System.out.println("之前布置现场");
        }
        private  void  after(){
            System.out.println("之后收拾现场");

        }
    }

代理对象可以做真实对象做不了的事情

真实对象可以做专注做自己的事情

posted @ 2021-12-25 23:31  燃冰ing  阅读(83)  评论(0)    收藏  举报