目录
文章内容
可以考虑从什么是线程?到线程的创建,以及线程的生命周期,说说线程的几个方法,再到线程安全问题引出synchronized关键字与Lock进行比较。
什么是线程?
线程是cpu调度的最小单位。
线程的创建?
1.继承Thread类2.实现Runnable接口3.实现Callabel接口4.线程池
开发中:优先选择:实现Runnable接口的方式原因:
1.实现的方式没有类的单继承性的局限性。
2.实现的方式更适合来处理多个线程有共享数据的情况。
如何理解实现Callable接口的方式创建多线程比实现Runnable接口创建多线程方式强大?
1. caLL()可以有返回值的。
2. caLL()可以抛出异常,被外面的操作捕获,获取异常的信息。
3. Callable是支持泛型的。
线程的生命周期?
新建 就绪 运行 阻塞 等待 死亡。
最好可以把图画出来。
sleep()与wait()的异同?
两个方法一旦执行 线程则进入阻塞状态。
sleep()是Tread类的,而wait()是Object类的。
sleep()任何场景下都可以调用,wait()只能在同步代码块或者同步方法中调用。
sleep()不释放锁,wait()释放锁。
synchronized和Lock的区别?
synchronized是隐形锁,出了作用域自动释放,Lock是显性锁,需要手动开启和关闭锁。
synchronized有代码块锁和方法锁,Lock锁只有代码块锁。
synchronized是语言级别的重量级锁,性能低,Lock锁是轻量级锁,性能好扩展性好。