Day09 多线程&网络编程

 

 

JDK1.8的新特性:
        匿名内部类访问其所在方法的局部变量时, 可以不用写final了, 因为系统会默认给加上.
        JDK1.8以前必须得写.
        加上final的作用是: 为了延长变量的声明周期.

面试题

  1. 多线程并行和并发的区别是什么?
    
    2. Java程序是多线程的吗?
        是, 因为至少开启了 main(主线程), GC(垃圾回收机制).

public class ThreadCountTest {

    public static void main(String[] args) {
        ThreadMXBean threadMXBean = ManagementFactory.getThreadMXBean();

        ThreadInfo[] threadInfos = threadMXBean.dumpAllThreads(false,false);

        for (ThreadInfo info : threadInfos ) {
             System.out.println("[" + info.getThreadId() + "]" + info.getThreadName());
        }
    }
}


        
    3. 多线程的两种实现方式之间的区别是什么?
        继承Thread类:
            好处: 代码相对比较简单.        //因为是继承Thread类, 所以可以直接使用Thread类中的非私有成员.
            弊端: 扩展性相对较差.        //因为是继承, 而Java中类之间的继承只能单继承, 不能多继承, 但是可以多层继承.
        
        实现Runnable接口:
            好处: 扩展性相对较强.
            弊端: 代码相对比较 繁琐.
                //繁琐, 冗余, 困难
        
    4. 多线程的执行特点是什么?
    
    5. 多线程的默认命名规则是什么?
        Thread-编号, 编号是从0开始的.
    
    6. 当匿名内部类访问其所在方法的局部变量时, 该变量必须加final修饰, 为什么?
        原因: 为了延长该变量的生命周期.
        但是JDK1.8之后, final可以不写, 因为程序会默认加上.
        
    7. 请手写一个死锁的代码.
        
    8. 多线程的生命周期是什么?
        新建, 就绪, 运行(有可能会发生阻塞), 死亡.
        
        //新建, 就绪, 运行(有可能会发生阻塞或者等待状态), 死亡.

猜你喜欢

转载自blog.csdn.net/QuietHRH/article/details/81675012