Java多线程方面的问题

来源:互联网 发布:mac mini a1176配置 编辑:程序博客网 时间:2024/05/01 11:23

不管大大小小的面试,几乎都会问到多线程的问题,自己也吃过很多亏,所以抽时间整理一下关于多线程相关的面试常见的一些问题,做个笔记,方便日后快速查阅。

1、什么是多线程及使用多线程有什么优缺点?

概念: 多线程是指从软件或者硬件上实现多个线程并发执行的技术,具有多线程能力的计算机有硬件支持而能够在同一时间执行多个线程,进而提升整体处理性能;通俗讲也就是多个线程同时处理我们待处理的任务,从而提高效率。

优点: 能够在一定程度上提高响应速度;在多核的情况下可以充分利用CPU资源;

缺点: 需要更多的内存,增加了调度和管理的开销;具有一些不确定性,可能给程序带来一些bug;需要复杂的同步机制;容易发生死锁,每个线程要执行完都需要相应的资源,发生较长时间的等待或资源的竞争容易产生死锁现象。

2、进程和线程的区别?

进程是一个独立的运行环境,相当于一个程序或者一个应用,是一个应用程序在处理机上的一次执行过程,是一个动态的概念;然而线程是进程中的一部分,进程保护多个线程在运行。
进程: 每个进程都有独立的代码和数据空间(进程上下文),进程间的切换会有较大的开销,一个进程包含n个线程;
线程: 同一类线程共享代码和数据空间(即在同一个进程中的线程),每个线程有独立的运行栈和程序计数器(PC),线程切换开销小;

线程和进程一样都分为5个阶段: 创建 - 就绪 - 运行 - 阻塞 - 终止。

区别: 1、地址空间和其它资源。进程是相互独立的,不能进行资源共享。但是同一个进程中的多个线程间可以共享,跨进程存在的线程之间的资源也是不可见的;
2、线程之间的切换比进程要快很多;

3、用户线程和守护线程的区别?

Java中的线程可以分为两种:用户线程(User)和守护线程(Daemon)

用户线程即我们在Java程序中所创建的一个线程。一个守护线程是在后台执行的,并且不会阻止JVM终止的线程。当没有用户线程在运行的时候,JVM关闭程序并且退出;一个守护线程创建的子线程仍然是守护线程。
任何线程都可以设置为用户线程和守护线程。通过Thread.setDaemon(bool on)方法,为true则把该线程设置为守护线程,反之则是用户线程。Thread.setDaemon必须要在Thread.start()之前来调用,不然运行时会抛出异常。

4、怎样创建一个线程?

在开发过程中,有两种创建线程的方法:
一个是实现Runnable接口,然后将它传递给Thread的构造函数,创建一个Thread对象;
一个是继承Thread类,直接扩展Thread类来创建多线程;

5、Thread类和Runnable接口的区别?

Thread类和Runnable接口是Java实现多线程的两个手段;

实现Runnable接口比继承Thread类具有一定的优势:
1、Runnable接口 适合多个相同的程序代码的线程去处理同一资源;
2、Runnable接口 可以避免java中的单继承限制;
3、Runnable接口 能够增加程序的健壮性,代码可以被多个线程共享,代码和数据独立。

————- 2017-02-22 22:03 待补充 —————–

0 0
原创粉丝点击