day23:Junit、反射、获取Class对象(三种)、获取构造方法、获取成员方法、不修改任何的java代码 调用类中任意的方法、jdk8与jdk9接口的新特性、Lambda 表达式

一 回顾

1. 线程常用的方法
        stop() 停止线程
        public static void yield() 礼让
        public final void join() 等待该线程终止
2.Object 提供操作线程的方法
        public final void wait() 无限等待
        public final void wait(long timeout) 计时等待
        public final void notify() 唤醒一个线程
        public final void notifyAll() 唤醒多个线程
3. 线程的第三种创建方式
        A.定义一个类实现 Callable 接口
        B.实例化任务对象 FutureTask 构建 Callable 实现类
        C.实例化线程对象 构建任务对象
        D.调用 get() 用于获取线程执行操作的返回值
4. 枚举 : 用枚举项表示一些固定的值
5. 语法:
        访问修饰符 enum 名称 {
                //枚举项
        }
6. 线程的生命周期
        新生 ==> 阻塞 ==> 运行 ==> 死亡 ==> 计时等待 ==> 无限等待
7. 线程池
        A.通过线程池工具获取线程池对象
        B.创建一个任务对象 实现 Callable Runnable 接口
        C.提供任务到线程池中
8. 单例设计模式
        特点:有且仅实例化一个对象
        原则: A. 私有化属性 B. 私有的构造方法 C. 公有的方法
        分类: 饿汉 懒汉 双重锁 内部类 枚举
9. 定义器
        A.定义一个类 继承 TimerTask
        B.实例化定时器 Timer
        C.将任务对象提交到定时器中
10. 生产者与消费者模式
        问题: 避免多线程资源浪费
        生产者: 使用同步锁 有产品 就无限等待 生产产品 唤醒消费者消费
        消费者: 使用同步锁 没有产品 就无限等待 消费产品 唤醒生产者生产

二 作业01

step01 需求

step03 代码-任务类

BufferedReader的readLine()如果没了则放回null

package com.qf.work;

import java.io.BufferedReader;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.IOException;
import java.util.TimerTask;

public class MyTimerTask extends TimerTask {
    @Override
    public void run() {
        BufferedReader br = null;
        try {
            br = new BufferedReader(new FileReader("1.txt"));
            String s =null;
            while ((s=br.readLine())!=null){
                System.out.println(s);
            }
        } catch (FileNotFoundException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

①实例化MyTimerTask对象

②实例化Timer对象

③timer.schedule(myTimerTask,1000);

package com.qf.work;

import java.util.Timer;

public class Test {
    public static void main(String[] args) {
        MyTimerTask myTimerTask = new MyTimerTask();
        Timer timer = new Timer();
        timer.schedule(myTimerTask,1000);
    }
}
name=李家森
age=18

三 作业02

step01 需求

1. 只实例化一个对象 ,(枚举默认就是实例化一个对象,所以是同一个对象)
2. 枚举类中私有的构造
3. 只需要提供一个枚举项 通过枚举类来获取枚举项 是同一个对象
package com.qf.work1;

public enum Color {
    RED;
    public void showInfo(){
        System.out.println("哈哈");
    }
}
package com.qf.work1;

public class Test {
    public static void main(String[] args) {
        Color red = Color.RED;
        Color red1 = Color.RED;
        System.out.println(red==red1);
        red.showInfo();
    }
}
true
哈哈

 四 作业03

step01 需求

step02 分析

A. 使用线程池 线程池使用的步骤
B. 需要返回值 任务对象需要实现 Callable 对象
C. 通过构造方法来传参
step03 代码 - 任务对象

①任意字符串,我们在实例化对象的时候传进去(高端)

package com.qf.work2;

import java.util.concurrent.Callable;

public class MyCallabe implements Callable {
    private String name;
    public MyCallabe(String name){
        this.name = name;
    }
    @Override
    public Object call() throws Exception {
        return name.substring(0,2);
    }
}
step04 测试类

①创建线程池Executors

②实例化MyCallabe对象

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

LI JS@你猜啊

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值