面试问题_基础03_多线程

多线程:
01.多线程介绍
1).什么是"进程":"进程"是操作系统中的概念,是指一个独立运行的"程序"。操作系统会负责管理每个应用程序,
为它们统一分配系统资源。
2).什么是"多进程":是指操作系统可以同时管理多个应用程序的"同时"运行,可以充分的利用硬件资源,也可以大大提高
用户体验度。
3).什么是"线程":"线程"是由某个"进程"内部启动的,一个进程可以启动N多的线程。一个线程内就是这个程序中的一段代码,
如果这段代码以一个"线程"的方式启动,它就会与"主进程"同时运行。
4).什么是"多线程":是指一个主进程程序可以以多线程的方式运行多段代码,意义:提高程序的运行效率,提高用户体验度。

02.Java多线程原理
    1).分时调度:多个进程都能获得相同的CPU时间,平均的轮流执行。
    2).抢占式调度:根据线程的优先级来优先选择"高优先级"的线程来执行。优先级是线程内部的一个属性,由线程本身自己来指定。
                   Java是支持"抢占式调度",Java中的线程是有优先级的:1--10,默认优先级:5
1.进程跟线程的区别是什么?
进程是执行着的一个应用程序,而线程是进程内部的一个执行序列。
一个进程可以有多个线程。线程又叫轻量级进程。
2.创建线程的几种不同的方式?
有三种:
    继承Thread类
    实现Ruunnable接口
    应用程序可以使用Executor框架来创建线程池
    实现Ruunnable接口最受欢迎,因为这个Java单继承,多接口的特性
3.概括的解释下线程的几种可用状态。
    .线程的状态图
    1).新建(new MyThread()) --> 运行(t.start())(就绪-->运行) ---> 消亡(run()方法执行完毕)
    2).新建 --> 运行 --> 受阻塞 --> 运行 --> 消亡
    3).新建 --> 运行 --> 休眠 -->  受阻塞 -- > 运行  -->消亡
    4).新建 --> 运行 --> 等待 -->  受阻塞 -- > 运行  -->消亡

    六种状态:
    1).新建
    2).运行
    3).受阻塞
    4).休眠
    5).等待
    6).消亡
4.同步方法和同步代码块的区别是什么?
    同步方法默认使用this或者当前类class对象作为锁。
    同步代码块指针对于可能发生问题的代码片段进行加锁。
5.什么是死锁?
    两个线程都在执行等待的过程,线程无限的等待。
6.如何确保N个线程可以访问N个资源同时又不导致死锁?
    指定获取锁的顺序,强制线程执行取锁。
7.sleep()和wait()的区别
    sleep:睡觉,占着CPU不工作,去睡觉,占用CPU资源
    wait: 等待,门外等候,等别人出来, 不占用CPU资源
8.实现同步的方式
    同步是多线程中的重要概念。
    同步方法:
    public synchronized void save(){}
    注: synchronized 关键字也可以修饰静态方法,此时如果调用该静态方法,将会锁住整个类
    同步代码块:
    synchronized(object){}      
    注:同步是一种高开销的操作,因此应该尽量减少同步的内容。
    通常没有必要同步整个方法,使用 synchronized 代码块同步关键代码即可。

你可能感兴趣的:(面试问题_基础03_多线程)