Java基础学习第六天
-
进程
1、自定义线程继承Thread类 2、重写run()方法,编写线程执行体 3、创建线程对象,调用start()方法启动线程 注意:线程开启不一定立即执行,由cpu调度执行, 定义MyRunnable类实现Runnable接口, 实现run()方法,编写线程执行体 创建线程对象,调用start()方法启动线程 小结: 继承Thread类: 1.子类继承Thread类具有多线程能力 2.启动线程:子类对象.start() 3.不建议使用,避免OOP单继承局限性 实现Runnable接口 1.实现Runnable接口具有多线程能力 2.启动线程:传入线程对象+目标对象.start() 3.推荐使用,避免单继承局限性,灵活方便,方便同一个对象被多个线程使用 实现Callable接口(了解即可) 1.实现Callable接口,需要返回值类型 2.重写call方法,需要抛出异常 3.创建目标对象 4.创建执行服务:ExecutorService ser = Executors.newFixedThreadPool(1); 5.提交执行:Future<Boolean>result1=ser.submit(t1) 6.获取结果:boolean r1=result1.get(); 7.关闭服务:ser.shutDownNow();
-
线程并发
多个线程操作同一个资源的情况下,线程不安全,数据易发生紊乱; 静态代理模式总结: 1、真实对象和代理对象都要实现同一个接口 2、代理对象要代理真是角色 好处: 1、代理对象可以做很多真实对象做不了的事情 2、真实对象专注做自己的事情
-
Lamda表达式
为什么要使用Lamda表达式:避免匿名内部类定义过多,去掉没有意义的代码只留下核心的逻辑 函数式接口:任何接口,如果只包含唯一一个抽象方法,那么它就是一个函数式接口;对于函数式接口,我们可以通过Lamda表达式来创建该接口的对象 推导Lamda接口表达式: 1、定义一个函数式接口 简化: 1、参数类型 2、简化括号 2、去掉花括号 总结:lambda表达式只有一行代码的情况下才能简化成为一行,如果有多行,那就用代码块包裹前提是接口是函数式接口 多个参数也可以去掉参数类型,要去掉就都去掉,必须加上括号