Java面试大全(2020年版)21-30

21.同步有什么特点:

同步的前提是:多个线程并且多个线程使用的是同一个锁对象

22.同步的有什么好处

同步的出现解决了多线程的安全问题

23.同步有什么弊端

当线程相当多时,因为每个线程都会去判断同步上的锁,这是很耗费资源的,无形中会降低程序的运行效率

24.同步方法:

同步方法就是使用synchronized关键字来修饰某个方法,则该方法称为同步方法。同步方法的同步监视器是this,也就是调用该方法的对象。

25.同步锁是谁?

对于非static方法,同步锁就是this。
对于static方法,我们使用当前方法所在类的字节码对象(类名.class)。

26.线程安全的类具有什么特征

  • 该类的对象可以被多个线程安全的访问
  • 每个线程调用该对象的任意方法之后都将得到正确结果
  • 每个线程调用该对象的任意方法之后,该对象状态依然保持合理状态。

27.Java中sleep方法和wait方法的区别?

虽然两者都是用来暂停当前运行的线程,但是 sleep() 实际上只是短暂停顿,因为它不会释放锁,而 wait() 意味着条件等待,这就是为什么该方法要释放锁,因为只有这样,其他等待的线程才能在满足条件时获取到该锁

28.run()方法和start()方法区别:

run()方法是多线程程序的一个约定。所有的多线程代码都在run方法里面。启动线程使用start()方法,不是run()方法。调用start()方法来启动线程,系统会把该线程run()方法当成线程执行体来处理。如果直接调用run()方法,则run()方法会被当成普通方法立即执行,而不是线程执行体。而且在run()方法返回之前其他线程无法并发执行。

29.多线程有几种实现方法?同步有几种实现方法?

①多线程有两种实现方法,分别是继承Thread类与实现Runnable接口
②同步的实现方面有两种,分别是synchronized,wait与notify
wait():使一个线程处于等待状态,并且释放所持有的对象的lock。
sleep():使一个正在运行的线程处于睡眠状态,是一个静态方法,调用此方法要捕捉
InterruptedException异常。
notify():唤醒一个处于等待状态的线程,注意的是在调用此方法的时候,并不能确切的唤醒某
一个等待状态的线程,而是由JVM确定唤醒哪个线程,而且不是按优先级。
Allnotity():唤醒所有处入等待状态的线程,注意并不是给所有唤醒线程一个对象的锁,而是让它们竞争。

30.启动一个线程是用run()还是start()?

启动一个线程是调用start()方法,使线程就绪状态,以后可以被调度为运行状态,一个线程必须关联一些具体的执行代码,run()方法是该线程所关联的执行代码。

原创文章 52 获赞 3 访问量 2448

猜你喜欢

转载自blog.csdn.net/m0_47572402/article/details/106066644