美文网首页
Java 面试题

Java 面试题

作者: bullion | 来源:发表于2019-04-07 18:52 被阅读0次

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适用于效率要求很高,但安全性要求不高的场景

相关文章

网友评论

      本文标题:Java 面试题

      本文链接:https://www.haomeiwen.com/subject/cfteiqtx.html