A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

1.启动一个线程是调用 run() 方法还是 start() 方法?

启动一个线程调用的是start()方法,使线程进入到就绪状态,这就意味着它可以由JVM调度并执行,这并不意味着线程就会立马执行;run()方法是线程启动后线程要进行回调的方法。

2. 请说出同步线程及线程调度相关的方法?

wait():使一个线程处于阻塞状态,并且释放所持有的对象锁;

sleep():使一个线程休眠一段时间,当时间过后线程又会恢复到以前的状态,并且在休眠状态不会释放对象锁;

notify():唤醒一个处于等待状态的线程,当然在调用此方法的时候,并不能确切的唤醒某一个等待状态的线程,而是由 JVM 确定唤醒哪个线程,而且与优先级无关;

notifyAll():唤醒所有处于等待状态的线程,该方法并不是将对象的锁给所有线程,而是让它们竞争,只有获得锁的线程才能进入就绪状态;

3.线程和进程的区别?

进程:具有一定独立功能的程序关于某个数据集合上的一次运行活动,是操作系统进行资源分配和调度的一个独立单位。

线程:是进程的一个实体,是 cpu 调度和分派的基本单位,是比进程更小的可以独立运行的基本单位。

特点:线程的划分尺度小于进程,这使多线程程序拥有高并发性,进程在运行时各自内存单元相互独立,线程之间内存共享,这使多线程编程可以拥有更好的性能和用户体验

4.Java 中多线程间的通信怎么实现 ?

1.共享变量:线程间通信可以通过发送信号,发送信号的一个简单方式是在共享对象的变量里设置信号值';

2.wait/notify 机制:以资源为例,生产者生产一个资源,通知消费者就消费掉一个资源,生产者继续生产资源,消费者消费资源,以此循环;

5.什么情况下导致线程死锁,遇到线程死锁该怎么解决?

死锁的定义:所谓死锁是指多个线程因竞争资源而造成的一种僵局(互相等待),若无外力作用,这些进程都将无法向前推进

死锁产生的原因:系统资源的竞争,进程运行推进顺序不合适

如何避免死锁:

1.加锁顺序(线程按照一定的顺序加锁)

2.加锁时限(线程尝试获取锁的时候加上一定的时限,超过时限则放弃对该锁的请求,并释放自己占有的锁)

6. 同一个类中的  2 个方法都加了同步锁,多个线程能同时访问同一个类中的这两个方法吗?

这个问题需要考虑到Lock与synchronized 两种实现锁的不同情形。因为这种情况下使用Lock 和synchronized会有截然不同的结果。Lock 可以让等待锁的线程响应中断,Lock 获取锁,之后需要释放锁。而 synchronized 却不行,使用 synchronized 时,当我们访问同一个类对象的时候,是同一把锁,所以可以访问该对象的其他 synchronized 方法。

7.请叙述一下您对线程池的理解?

第一:降低资源消耗。通过重复利用已创建的线程降低线程创建和销毁造成的消耗。
第二:提高响应速度。当任务到达时,任务可以不需要等到线程创建就能立即执行。
第三:提高线程的可管理性。线程是稀缺资源,如果无限制的创建,不仅会消耗系统资源,还会降低系统的稳定性,使用线程池可以进行统一的分配,调优和监控。

8.常用的线程池有哪些?

newSingleThreadExecutor:创建一个单线程的线程池,此线程池保证所有任务的执行顺序按照任务的提交顺序执行。
newFixedThreadPool:创建固定大小的线程池,每次提交一个任务就创建一个线程,直到线程达到线程池的最大大小。
newCachedThreadPool:创建一个可缓存的线程池,此线程池不会对线程池大小做限制,线程池大小完全依赖于操作系统(或者说 JVM)能够创建的最大线程大小。
newScheduledThreadPool:创建一个大小无限的线程池,此线程池支持定时以及周期性执行任务的需求。

9.在 java 中 wait 和 和 sleep 方法的不同?

最大的不同是在等待时 wait 会释放锁,而 sleep 一直持有锁。wait 通常被用于线程间交互,sleep 通常被用于暂停执行。

10.多线程的常见创建方式?

一种是继承thread类,一种是实现runnable接口;

11.synchronized和lock的区别?

1.synchronized是一个关键字,lock是一个接口

2.在代码出现异常的时候,synchronized会自动的释放锁资源,lock要调用unlock方法才能释放锁资源;

3.lock可以中断其他等待锁对象的线程,synchronized不行,线程会一直等待下去;


0 个回复

您需要登录后才可以回帖 登录 | 加入黑马