java 进程线程面试题,Java多线程面试题分享

原标题:Java多线程面试题分享

在分享面试题之前,先回顾一下进程和线程的相关定义,有时候这也是面试时的题目:

1、进程是什么?

进程是程序在处理机中的一次运行。一个进程既包括其所要执行的指令,也包括了执行指令所需的系统资源,不同进程所占用的系统资源相对独立。所以进程是重量级的任务,它们之间的通信和转换都需要操作系统付出较大的开销。

2、线程是什么?

线程是进程中的一个实体,是被系统独立调度和分派的基本单位。线程自己基本上不拥有系统资源,但它可以与同属一个进程的其他线程共享进程所拥有的全部资源。所以线程是轻量级的任务,它们之间的通信和转换只需要较小的系统开销。

还有哪些常问的面试题呢?

1、并行和并发有什么区别?

答:两者区别:一个是交替执行,一个是同时执行。

2、创建线程有哪几种方式?

答:继承Thread类、实现Runnable接口和实现Callable接口。

3、线程有哪些状态?

答:线程可以正在运行(Running),只要获得了CPU时间它就可以运行;

运行的线程可以被挂起(Suspend),并临时中断它的执行;

一个挂起的线程可以被恢复(Resume),允许它从停止的地方继续运行;

一个线程可以在等待资源时被阻塞(Block);

在任何时候,线程可以被终止(Terminate),这将立即中断运行。一旦终止,线程不能被恢复。

有的说六种的是算上初始的状态,即:初始(New):新创建了一个线程对象,但还没有调用start()方法。

4、sleep() 和 wait() 有什么区别?

答:(1)同步锁的对待不同:

sleep()后,程序并不会不释放同步锁。

wait()后,程序会释放同步锁。

(2)用法的不同:

sleep()可以用时间指定来使他自动醒过来。如果时间不到你只能调用interreput()来强行打断。

wait()可以用notify()直接唤起。

(3)属于不同的类:

sleep()的类是Thread。

wait()的类是Object。

5、线程的 run()和 start()有什么区别?

答:调用start方法方可启动线程,而run方法只是thread的一个普通方法调用,还是在主线程里执行。

6、什么是死锁?怎么防止死锁?

答:当某一进程提出资源的使用要求后,使得系统中一些进程处于无休止的阻塞状态,在无外力的作用下,这些进程永远也不能继续前进。我们称这种现象为死锁。

(1) 尽量使用 tryLock(long timeout, TimeUnit unit)的方法(ReentrantLock、ReentrantReadWriteLock),设置超时时间,超时可以退出防止死锁。

(2)尽量使用 Java. util. concurrent 并发类代替自己手写锁。

(3)尽量降低锁的使用粒度,尽量不要几个功能用同一把锁。

(4)尽量减少同步的代码块。

7、synchronized 和 ReentrantLock 区别是什么?

答:一个可重入的互斥锁 Lock,它具有与使用 synchronized 方法和语句所访问的隐式监视器锁相同的一些基本行为和语义,但功能更强大。

ReentrantLock更加灵活,提供了超时获取锁,可中断锁。提供了非公平锁和非公平锁,而synchronized仅仅是非公平锁。

用法上,ReentrantLock必须手动释放锁,并且只能修饰代码块。而synchronized不用手动释放锁,除此之外可以修饰方法。

使用synchronized的线程会被block住,而ReentrantLock的线程则是进入waiting状态。返回搜狐,查看更多

责任编辑:

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值