java并发面试题(三)

  1. 一个线程在运行时发生异常会怎样?
    答:如果这个异常没有被捕获,这个线程将会停止运行。

  2. 什么是线程组?
    答:ThreadGroup类,可以把线程归属到某一个线程组中,线程组中可以有线程对象, 也可以有线程组,组中还可以有线程,它的组织结构有点类似于树,但是它使用起来不安全。

  3. Java中的volatile变量是什么?
    答:volatile变量是java语言提供的一种稍弱的同步机制,它可以用来确保将变量的更新操作通知到其他的线程。

  4. 怎么检测一个线程是否拥有锁?
    答:在 java.lang.Thread中有一个方法叫holdsLock(),如果当且仅当当前线程拥有某个具体对象的锁时,它会返回true。

  5. 有三个线程T1,T2,T3,怎么确保它们按顺序执行?
    答:用线程类的join()方法在一个线程中启动另一个线程,参考代码如下:

 public class TestMain {
    public static void main(String[] args) throws Exception {
        Thread T1 = new Thread(new Runnable() {
            @Override
            public void run() {
                System.out.println("我是T1");
            }
        });
        Thread T2 = new Thread(new Runnable() {
            @Override
            public void run() {
                T1.start();
                try {
                    T1.join();
                } catch (InterruptedException e) {
                    e.printStackTrace();
                }
                System.out.println("我是T2");
            }
        });
        Thread T3 = new Thread(new Runnable() {
            @Override
            public void run() {
                T2.start();
                try {
                    T2.join();
                } catch (InterruptedException e) {
                    e.printStackTrace();
                }
                System.out.println("我是T3");
            }
        });
        T3.start();
    }
}
  1. 什么是原子操作?
    答:原子操作是指一个不受其他操作影响的操作任务单元,比如i++就不是原子操作。

  2. 什么是synchronized关键字?
    答:可参考本篇博客【synchronized关键字简析

  3. 什么是线程池?
    答:可参考本篇博客【简单了解线程池

  4. 说说线程池创建的几种方式,以及最佳方式?
    答:可参考本篇博客【为什么推荐使用ThreadPoolExecutor来创建线程池

  5. 说说wait()和sleep()的区别?
    答:可参考本篇博客【说说wait()和sleep()的区别

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

猜你喜欢

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