线程,设计模式

1:多线程

         (1)多线程:一个应用程序有多条执行路径

                   进程:正在执行的应用程序

                   线程:进程的执行单元,执行路径

                   单线程:一个应用程序只有一条执行路径

                   多线程:一个应用程序有多条执行路径

                  

                   多进程的意义?

                            提高CPU的使用率

                   多线程的意义?

                            提高应用程序的使用率

       (2)Java程序的运行原理及JVM的启动是多线程的吗?

                   A:Java命令去启动JVMJVM会启动一个进程,该进程会启动一个主线程。

                   B:JVM的启动是多线程的,因为它最低有两个线程启动了,主线程和垃圾回收线程。

       (3)多线程的实现方案

                   A:继承Thread

                            重写run方法,创建Thread对象,调用start方法

                   B:实现Runnable接口

                            重写run方法,创建Thread对象(传入Runnable的实例化子对象),调用start方法

       (4)线程的调度和优先级问题

                   A:线程的调度

                            a:分时调度

                            b:抢占式调度 (Java采用的是该调度方式)

                   B:获取和设置线程优先级

                            a:默认是5

                            b:范围是1-10

       (5)线程的控制(常见方法)

                   A:休眠线程 sleep

                   B:加入线程join

                   C:礼让线程 yield

                   D:后台线程  public final void setDaemon(boolean on)将该线程标记为守护线程或用户线程。当正在运行的线程都是守护线程时,Java 虚拟机退出。

                   E:终止线程 stop(建议不使用)interrupt

       (6)线程的生命周期

                   A:新建

                   B:就绪

                   C:运行

                   D:阻塞

                   E:死亡

       (7)多线程安全问题的原因(也是我们以后判断一个程序是否有线程安全问题的依据)

                   A:是否有多线程环境

                   B:是否有共享数据

                   C:是否有多条语句操作共享数据

       (8)同步解决线程安全问题

                   A:同步代码块

                            synchronized(对象) {

                                     需要被同步的代码;

                            }

                           

                            这里的锁对象可以是任意对象。

                           

                   B:同步方法

                            把同步加在方法上。

                           

                            这里的锁对象是this

                           

                   C:静态同步方法

                            把同步加在方法上。

                           

                            这里的锁对象是当前类的字节码文件对象

       (9)回顾以前的线程安全的类

                   A:StringBuffer

                   B:Vector

                   C:Hashtable

                   D:如何把一个线程不安全的集合类变成一个线程安全的集合类

                            Collections工具类的方法即可。

 

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

                   Lock锁,Lock.lock();Lock.unlock();

         (11)死锁

         (12)生产者和消费者多线程体现

         (13)线程组

         (14)线程池

       (15)多线程实现的第三种方案 callback,和线程池结合使用

       (16)程的面试题

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:懒汉式(在需要创建时才创建)

         每个类只有一个实例化对象,且只允许自身创建,外界只能使用。这里要注意,构造对象要私有化,而且要在成员变量中实例化对象,并写一个public方法返回这个对象。在懒汉式中,存在线程安全问题,所以返回对象时家的关键字是 public sychornizedstatic

(4)Runtime

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

                   还可以调用dos命令。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值