一 回顾
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.定义一个类 继承 TimerTaskB.实例化定时器 TimerC.将任务对象提交到定时器中10. 生产者与消费者模式问题: 避免多线程资源浪费生产者: 使用同步锁 有产品 就无限等待 生产产品 唤醒消费者消费消费者: 使用同步锁 没有产品 就无限等待 消费产品 唤醒生产者生产
二 作业01
step01
需求
![](https://img-blog.csdnimg.cn/24df6cf3c03044668a3a767e9aa24722.png?x-oss-process=image/watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBAQOS9oOeMnOWVig==,size_19,color_FFFFFF,t_70,g_se,x_16)
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对象
③