java面试基础问题积累----多线程,并发
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了java面试基础问题积累----多线程,并发相关的知识,希望对你有一定的参考价值。
1.object提供哪些线程相关方法
object类是所有java类的超类,提供三个与线程密切相关的方法,wait(),notify(),notifyAll()
wait()提供三种重载形式,计时等待和无限等待(线程处于等待状态,直到其他线程调用此对象的notify()或者notifyAll()方法)
notify()唤醒此对象监视器上等待的单个线程
notifyAll()唤醒此对象监视器上等待的所有线程
2.线程死锁
Run1 implements Runnable{
public void run(){
synchronized(‘‘){
}
}
}
获得当前线程名字:Thread.currentthread().getName()
创建线程:Thread th=new Thread(new Run1());th.start();
死锁四个条件:
1.互斥 2.非剥夺 3.请求与保持 4.循环等待
3.哪些接口可以返回有返回值的线程
Callable与Future接口联合使用,Executors包含从普通类转换成Callable类的实用方法
public interface Callable<V>{
V call() throws Exception;
}
public class Transfer implements Callable<Integer>{
public Integer call(){
return i;
}
}
Transfer tran=new Transfer();
FutureTask ft=new FutureTask<Integer>(tran);
Thread thr=new thread(ft);
thr.start();
4.哪些类可用于创建线程池
线程池是一个线程的集合,与连接池功能相同
如果系统中需要创建大量短生命周期的线程,需要用线程池
1>Executor类提供一些静态方法获取线程池,例如,newCachedThreadPool()--在没有线程时新建一个线程,newFixedThreadPool()--创建固定大小的线程
使用完线程池,使用ExecutorService.shutdown()
2>ThreadGrop类,类似线程池的线程组类,线程组将每个线程归属到某一个线程组管理的一员
5.后台线程(守护线程)
作用:为其他线程服务
如何设置:调用线程的start()方法之前调setDaemon(boolean on)方法
Thread:isDaemon(),setDaemon(boolean on)
Jvm中的系统资源回收机制就是后台线程的典型列子
6.线程休眠
Thread的sleep()是个静态方法,可以使当前运行中的线程暂停执行指定的时间
7.终止线程
1>stop():不安全的,在线程终止之前没有对其做任何的清除操作,将会释放该线程对象已经锁定的所有监视器
2>suspend():不安全的,有固定的死锁倾向,如果目标线程挂起时在保护关键系统资源的监视器上保持有锁,目标线程重新开始以前任何线程都不能访问该资源,如果重新开始目标线程的线程想在调用resume()方法之前锁定该监视器,就发生死锁
3>利用boolean值来终止正在运行的线程
4>isInterrupted(),Interrupted()安全终止
8.线程的挂起和恢复
挂起:让出CPU的使用权限,暂时停止运行,由于时间不确定,所以挂起需要wait()
恢复:让挂起的线程恢复执行过程,从中断处继续线程的执行。挂起线程的对象执行notifyAll()方法
9.同步和异步的区别
同步:避免死锁,脏数据的发生,对共享资源按顺序来修改(电话,需要等待接收者的返回信息)
异步:可以提高效率,异步处理可以同时做多项工作,但保证必须是可以并发处理的(广播,不关心接受者的状态,不等待接受者的返回信息)
区别:需要等待和不需要等待
10.同步解锁解决共享资源
同步语句块,同步方法,还可以同步解锁
ReentrantLock lock.lock();lock.unlock();
11.什么时候涉及线程程序
通常,多个需求同时进行,或者需要长时间等待的操作。文件,网络,IO设备
以上是关于java面试基础问题积累----多线程,并发的主要内容,如果未能解决你的问题,请参考以下文章