day24-多线程和常见设计模式

1:多线程(理解)

(1)JDK5以后的针对线程的锁定操作和释放操作

Lock

(2)死锁问题的描述和代码体现

(3)生产者和消费者多线程体现(线程间通信问题)

以学生作为资源来实现的

 

资源类:Student

设置数据类:SetThread(生产者)

获取数据类:GetThread(消费者)

测试类:StudentDemo

 

代码:

A:最基本的版本,只有一个数据。

B:改进版本,给出了不同的数据,并加入了同步机制

C:等待唤醒机制改进该程序,让数据能够实现依次的出现

wait()

notify()

notifyAll() (多生产多消费)

D:等待唤醒机制的代码优化。把数据及操作都写在了资源类中

(4)线程组

(5)线程池

 

(6) 多线程实现的第三种方案

 

 

(7) 多线程的面试题

 

(8) 任务计时器

 

 

 

1.1 面试多线程

1:多线程有几种实现方案,分别是哪几种?

两种。

 

继承Thread

实现Runnable接口

 

扩展一种:实现Callable接口。这个得和线程池结合。

 

2:同步有几种方式,分别是什么?

两种。

 

同步代码块

同步方法

 

3:启动一个线程是run()还是start()?它们的区别?

start();

 

run():封装了被线程执行的代码,直接调用仅仅是普通方法的调用

start():启动线程,并由JVM自动调用run()方法

 

4:sleep()wait()方法的区别

sleep():必须指时间;不释放锁。

wait():可以不指定时间,也可以指定时间;释放锁。

 

5:为什么wait(),notify(),notifyAll()等方法都定义在Object类中

因为这些方法的调用是依赖于锁对象的,而同步代码块的锁对象是任意锁。

而Object代码任意的对象,所以,定义在这里面。

 

6:线程的生命周期图

新建 -- 就绪 -- 运行 -- 死亡

新建 -- 就绪 -- 运行 -- 阻塞 -- 就绪 -- 运行 -- 死亡

建议:画图解释。

 

2:设计模式(理解)

(1)向对象的常见设计原则

单一

开闭

里氏

依赖注入

接口

迪米特

(2)设计模式概述和分类

A:经验的总结

B:三类

创建型

结构型

行为型

(3)改进的设计模式

A:简单工厂模式

B:工厂方法模式

 

 

C:单例模式(掌握)

a:饿汉式

 

b:懒汉式

 

(4)Runtime

JDK提供的一个单例模式应用的类。

还可以调用dos命令。

 

posted @ 2018-06-21 08:11  深沉有点事  阅读(95)  评论(0编辑  收藏  举报