Java 面试题

java多线程实现主线程等待子线程执行完问题

1、使用Thread的join()方法,join()方法会阻塞主线程继续向下执行。

2、使用Java.util.concurrent中的CountDownLatch,是一个倒数计数器。初始化时先设置一个倒数计数初始值,每调用一次countDown()方法,倒数值减一,他的await()方法会阻塞当前进程,直到倒数至0

Java中多线程访问冲突的解决方式

当时用多线程访问同一个资源时,非常容易出现线程安全的问题,例如当多个线程同时对一个数据进行修改时,会导致某些线程对数据的修改丢失。因此需要采用同步机制来解决这种问题。

第一种 同步方法 synchronized

第二种 同步代码块 synchronized

第三种 使用特殊成员变量(volatile 成员变量)实现线程同步(前提是对成员变量的操作是原子操作)

volatile是一个类型修饰符,被设计用来修饰被不同线程访问和修饰的变量。当变量没有被volatile修饰时,线程读取数据时可能会从缓存中去读取,如果其他线程修改了该变量,则无法读取到修改后的数据。当变量被volatile修饰时,线程每次使用时都会直接到内存中提取,而不会利用缓存,从而保证了数据的同步

第四种 使用Lock接口(java.util.concurrent.locks包)

lock.lock(); // 以阻塞方式获得锁

lock.unlock(); // 释放锁

第五种 使用线程局部变量(thread-local)解决多线程对同一变量的访问冲突,而不能实现同步(ThreadLocal类)

第六种 使用阻塞队列实现线程同步(java.util.concurrent包)

第七种 使用原子变量实现线程同步 (java.util.concurrent.atomic包)

Restful?

Restful本质是一种软件架构风格,面向资源设置api,主要解决问题:降低开发的复杂性;提高系统的可伸缩性。Restful适用于效率要求很高,但安全性要求不高的场景

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • Java SE 基础: 封装、继承、多态 封装: 概念:就是把对象的属性和操作(或服务)结合为一个独立的整体,并尽...
    Jayden_Cao阅读 2,259评论 0 8
  • 由于时间仓促,有些地方未写完,后面会继续补充.如有不妥之处,欢迎及时与我沟通. 如果你也是在学习java,给你们推...
    分不清java阅读 2,880评论 0 15
  • 相关概念 面向对象的三个特征 封装,继承,多态.这个应该是人人皆知.有时候也会加上抽象. 多态的好处 允许不同类对...
    东经315度阅读 2,213评论 0 8
  • 不足的地方请大家多多指正,如有其它没有想到的常问面试题请大家多多评论,一起成长,感谢!~ String可以被继承吗...
    启示录是真的阅读 3,084评论 3 3
  • 最近总是感觉时间过得飞快,也不知是事情过多的缘故,欠自己一场恬静的睡眠,也很久没有一次完整的清空与整合。 不知什么...
    洛柠N阅读 116评论 0 0

友情链接更多精彩内容