• Java多线程入门


    Process 与 Thread(20-12-08)

    进程是执行程序的一次执行过程,它是一个动态的概念。是系统资源分配的单位

    一个进程可以包含若干个线程,一个进程至少有一个线程,不然没有存在的意义。线程是CPU调度和执行的单位。

    核心概念:

    • 线程就是独立的执行路径;
    • 在程序运行时,即使没有自己创建线程,后台也会有多个线程,如主线程, gc线程
    • main()称之为主线程,为系统的入口,用于执行整个程序;
    • 在一个进程中,如果开辟了多个线程,线程的运行由调度器安排调度,调度器是与操作系统紧密相关的,先后顺序是不能人为的干预的。
    • 对同一份资源操作时,会存在资源抢夺的问题,需要加入并发控制;
    • 线程会带来额外的开销,如cpu调度时间,并发控制开销。
    • 每个线程在自己的工作内存交互,内存控制不当会造成数据不一致
    线程创建

    Thread class----> 继承Thread类(重点)

    Runnable接口----> 实现Runnable接口(重点)

    Callable接口----> 实现Callable接口(了解)

    方式一:

    继承Thread类,重写run()方法,调用start开启线程

    注意,线程开启不一定立即执行,由CPU调度执行

    //启动线程start()开启方式
    线程对象.start();
    

    不建议使用:避免OOP单继承局限性

    方式二

    定义MyRunnable类实现Runnable接口

    实现run()方法,编写线程执行体

    创建线程对象,调用start()方法启动线程

    //启动线程start()开启方式
    new Thread(线程对象).start();
    

    推荐使用:避免单继承局限性,灵活方便,方便同一个对象被多个线程使用

    方式三

    实现Callable接口(了解即可),需要返回值类型

    重写call方法,需抛出异常

    创建目标对象

    创建执行服务:ExecutorService ser=Executor.newFixedThreadPool(1);

    提交执行:Future result1=ser.submit(t1);

    获取结果:boolean r1=result1.get();

    关闭服务:ser.shutdownNow();

    Lambda表达式(20-12-08)

    只有一个方法的才叫 函数式接口 才可以用 lambda

    public class TestLambda1 {
        public static void main(String[] args) {
    
            ILove love=(int a)->{//lambda表达式
                System.out.println("i love you-->"+a);
            };
            love.love(520);
    //总结
            //lambda表达式只能是在只有一行代码的情况下才能简化为一行,如果有多行,那么就要代码块包裹。
            //前提是接口为函数式接口,只有一个方法的才叫 **函数式接口** 才可以用 lambda表达式
            //多个参数也可以去掉参数类型,要去掉就都去掉,必须加上括号。
    
        }
    }
    interface ILove{
        void love(int a);
    }
    
    

    静态代理模式(20-12-08)

    总结://要使用lambda表达式

    真实对象和代理对象都要实现同一个接口

    代理对象要代理真实对象

    好处:

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

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

    本人学习Java的一片私人空间……
  • 相关阅读:
    python第三十一课--递归(1.简单递归函数的定义和使用)
    python第三十课--异常(with as操作)
    python第三十课--异常(异常对象传递过程)
    python第三十课--异常(raise关键字)
    python第三十课--异常(else讲解)
    python第三十课--异常(finally讲解)
    python第三十课--异常(异常处理定义格式和常见类型)
    python第二十九课——文件读写(复制文件)
    python第二十九课——文件读写(写数据的操作)
    16 nginx实现负载均衡
  • 原文地址:https://www.cnblogs.com/none-space/p/14105751.html
Copyright © 2020-2023  润新知