东莞营销网站建设价格优化工具箱下载
目录
- 1. 面试题一:在 Java 程序中怎么保证多线程的运行安全?
- 1.1 追问一:Java 线程同步的几种方法?
- 2. 面试题二:JMM
- 3. 面试题三:计算机网络的各层协议及作用?
1. 面试题一:在 Java 程序中怎么保证多线程的运行安全?
线程安全在三个方面体现:
- 原子性:提供互斥访问,同⼀时刻只能有⼀个线程对数据进行操作(atomic,synchronized);
- 可见性:⼀个线程对主内存的修改可以及时地被其他线程看到(synchronized、volatile);
- 有序性:⼀个线程观察其他线程中的指令执行顺序,由于指令重排序,该观察结果⼀般杂乱无序(happens&before 原则)。
补充:
- 原子性指一个操作是不可中断的。即使是在多个线程一起执行的时候,一个操作一旦开始,就不会被其他线程干扰。
- 可见性指当一个线程修改了某一个共享变量的值,其他的线程是否能够立即知道这个修改。显然,对于串行程序来说,可见性问题是不存在的。因为我们在任何一个操作步骤中修改了某个变量,那么在后续的步骤中,读取这个变量一定是修改后的值。
- 有序性指对于一个线程的执行代码,我们习惯性的认为代码的执行是从前往后,依次执行的。但是在并发时,程序的执行可能会出现乱序。给人直观的感觉就是:写在前面的代码,可能会在后面执行。
1.1 追问一:Java 线程同步的几种方法?
- 使用 Synchronized 关键字;
- wait 和 notify;
- 使用特殊域变量 volatile 实现线程同步;
- 使用可重⼊锁实现线程同步;
- 使用阻塞队列实现线程同步;
- 使用信号量 Semaphore。
2. 面试题二:JMM
关于「JMM」的文章请看这位大佬的博文->>>【Java线程】Java内存模型总结
总结:JMM通过控制主内存与每个线程的本地内存之间的交互,来为 Java 程序员提供内存可见性保证。
在这里,顺便复习一下计算机网络的知识吧。
3. 面试题三:计算机网络的各层协议及作用?
大家也可以看我的这篇文章,写的也是非常详细了—>>> OSI 7层模型讲解(大白话 通俗易懂)