多线程面试题

1.什么是进程?

进程是系统中正在运行的一个程序,程序一旦运行就是进程。

进程可以看成程序执行的一个实例。进程是系统资源分配的独立实体,每个进程都拥有独立的地址空间。一个进程无法 访问另一个进程的变量和数据结构,如果想让一个进程访问另一个进程的资源,需要使用进程间通信,比如管道,文件,套接字等。

2.什么是线程?

是操作系统能够进行运算调度的最小单位。他被包含在进程之中,是进程中的实际运作单位。一个线程指的是进程中一个单一顺序的控制流,一个进程中可以并发多个线程,每条线程并执行不同的任务。

3.线程的实现方式?

1.继承Thread类

2.实现Runnable接口

3.使用Callable和Future

4.Thread类中的start()和run()方法有什么区别?

1start()方法 来启动线程,真正实现了多线程运行。这是无需等待run方法体代码执行完毕,可以直接继续执行下面的代码;通过调用Thread类的Start()方法来启动一个线程,这是此线程是处于就绪状态,并没有运行。然后和通过此Thread类调用方法run()来完成其运行操作的,这里方法 run()称为线程题,它包含了要执行的这个线程的内容,Run方法运行结束,此线程终止。然后CPU在调度其他线程

2.run()方法当作普通方法的方式调用。程序还是要顺序执行,要等待run方法体执行完毕后,菜可继续执行下面的代码;程序中只要主线程----这一个线程,其程序执行 路径还是只有一条,这样就没有达到写线程的目的。

5.线程NEW状态

new创建一个Thread对象时,并没处于执行状态,因为没有调用start方法启动该线程,那么此时的状态就是新建状态。

6.线程BUNNABLE状态

线程对象通过start方法进入runnable状态,启动的线程不一定会立即得到执行,线程的运行与否要看cpu的调度,我们把中间状态叫可执行状态。

7.线程的RUNNING状态

一旦cpu通过轮询或其它方式从任务可以执行队列中选中了线程,此时它采能真正的执行自己的逻辑代码。

8.线程的BNLOCKED状态

线程正在等待获取锁。

     进入BLOCKED状态,比如调用了sleep,或者wait方法

     进行 某个阻塞的io操作,比如因网络数据的读写进入BLOCKED状态

     获取某个资源锁,从而加入到该锁的阻塞队列中而进入BLOCKED状态

 9.线程的TERMINATED状态

TERMINATED是一个线程的最终状态,在该状态下线程不会在切换到其它任何状态了,代表整个生命周期都结束了。

下面几种情况会进入TERMINATED状态:

   线程运行正常结束,结束生命周期

  线程运行出错意外结束

JVM Crash导致所有的线程都结束

10.线程状态转化图

多线程面试题_第1张图片

 11.如何知道代码段被哪个线程调用?

System.out.println(Thread.currentThread().getName());

 12.sleep()方法

方法sleep()的作用是在指定的毫秒数内让当前的“正在执行的线程”休眠(暂停执行)。

13.如何优雅的设置睡眠时间?

多线程面试题_第2张图片

 可以看到表达的含义更清晰,更优雅。

14.停止线程

run方法执行完成,自然终止

stop()方法,suspend()以及resume()都是过期作废方法,使用它们结果不可预期

大多数停止一个线程的操作使用Thread.interrupt()等于说给线程打一个停止的标记,此方法不回去终止一个正在运行的线程,需要加入一个判断才能可以完成线程的停止。

15.yield()

放弃当前cpu资源,将它让给其它的任务占用cpu执行时间。但放弃的时间不确定,有可能刚刚放弃,马上又获得cpu时间片

16.线程的优先级

在操作系统中,线程可以划分优先级,优先级较高的线程得到cpu资源比较多,也就是cpu有限执行优先级较高的线程对象中的任务,但是不能保证一定优先级高,就先执行。

java的优先级分为1-10个等级,数字越大优先级越高,默认优先级大小为5。超出范围则抛出异常

17.优先级继承特性

线程的优先级具有继承性,比如a线程启动b线程,b线程与a线程优先级是一样的。

18.什么是synchronzied?

synchrozied关键字实现一个简单的策略来防止线程干扰和内存一致性错误,如果一个对象是对个线程可见的,那么对该想的所有读写都将通过同步的方式来进行。

19.synchronized关键字用法?

可以用于对代码块或方法的修饰

20.synchronized锁的是什么?

普通同步方法 -----》锁的是当前实例对象

静态同步方法-------》锁的是当前类的Class对象

同步方法块----------》锁的是synchronized括号里配置的对象

你可能感兴趣的:(面试题,面试,java)