java并发面试题(六)

  1. 在 Java中CycliBarriar和CountdownLatch有什么区别?
    答:CycliBarriar可以重复使用,而CountdownLatch不行。

  2. 什么是阻塞式方法?
    答:阻塞式方法是指程序会一直等待该方法完成,线程会被挂起,在此期间不会做其他事情,直到结果返回。

  3. 如果同步块内的线程抛出异常会发生什么?
    答:同步块中无论是正常退出还是异常退出,都会释放锁。

  4. 如何强制启动一个线程?
    答:做不到,在Java里面没有这个Api去强制启动一个线程。

  5. 可以重载start()方法么?
    答:可以重载,不过重载后还要重载run()方法。

  6. 你对线程优先级的理解是什么?
    答:线程优先级是一个从1-10的int类型的变量,1代表最低优先级,5代表中间优先级,10代表最高优先级。高优先级的线程只是在运行时会具有优先级,不过并不代表着高优先级的线程一定会比低优先级的线程先运行,只是机会更大,具体还是要看操作系统是怎么调度线程的。

  7. 为什么wait(), notify()和notifyAll()方法必须在同步方法或者同步块中被调用?
    答:当调用wait()方法时,线程会释放它所持对象的锁。而当调用notify()和notifyAll()方法时,线程也会释放它所持对象的锁,方便等待的其他线程可以去获取它。可以发现,这几个方法都需要线程持有对象的锁,只能通过同步来实现,所以wait(), notify()和notifyAll()方法只能在同步方法或者同步块中被调用。

  8. 为什么Thread 类的sleep()和yield()方法是静态的?
    答:sleep()和yield()方法都是作用于正在运行的线程,让线程睡眠或者让出cpu资源。非运行状态的线程调用这两个方法没什么意义,所以把这两个方法设为静态,是为了避免程序员错误的认为可以在其他非运行线程调用这两个方法。

  9. Java中多线程同步是什么?
    答:在多线程程序下,同步能控制对共享资源的访问。因为如果没有做同步,当一个线程在访问共享一个变量时,另一个线程很可能正在对这个共享变量做修改操作,这样就会造成错误的结果。

  10. 说说并发编程三要素?
    原子性:原子性指的是一个或者多个操作,要么全部执行并且在执行的过程中不被其他操作打断,要么就全部都不执行。
    可见性:可见性指多个线程操作一个共享变量时,其中一个线程对变量进行修改后,其他线程可以立即看到修改的结果。
    有序性:有序性,即程序的执行顺序要按照代码的先后顺序来执行,不然JVM会根据情况做指令重排序,提高程序运行效率。

发布了213 篇原创文章 · 获赞 214 · 访问量 3万+

猜你喜欢

转载自blog.csdn.net/weixin_38106322/article/details/104521772