600字范文,内容丰富有趣,生活中的好帮手!
600字范文 > java面试基础问题积累----多线程 并发

java面试基础问题积累----多线程 并发

时间:2019-05-05 16:21:32

相关推荐

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 implementsCallable<Integer>{

public Integer call(){

return i;

}

}

Transfer tran=newTransfer();

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设备

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。