扫码关注公众号

java语言考点之多线程&NIO
08-28
386观看
01

关于多线程和多线程编程,以下哪些说法正确的()

正确答案是A、B、DA.不同进程有不同的页表,对应着不同的物理地址空间,因此进程间通信需要使用IPC或者socket。而线程可以共享了进程的地址空间,所以A对。B.与A的原因类似,进程创建是操作系统要为它分配内存,销毁时收回。而线程不需要,所以线程的创建与销毁更快。B对。C.当存在大量计算需求的时候,比如需要并发计算时,会频繁的切换进程/线程。而线程切换的成本小于进程,因此选择多线程模型。C对。D.同一进程中的不同线程共享地址空间,所以一个线程挂掉可能会导致整个进程挂掉。D对。

来自:多线程和线程池-多线程的创建和执行
02

BIO、NIO、AIO 有什么区别?(面试题)

BIO:BlockIO同步阻塞式IO,就是我们平常使用的传统IO,它的特点是模式简单使用方便,并发处理能力低。NIO:NewIO同步非阻塞IO,是传统IO的升级,客户端和服务器端通过Channel(通道)通讯,实现了多路复用。AIO:AsynchronousIO是NIO的升级,也叫NIO2,实现了异步非堵塞IO,异步IO的操作基于事件和回调机制。

来自:多线程和线程池-多线程的创建和执行
03

NIO和IO各适用的场景是什么?

如果需要管理同时打开的成千上万个连接,这些连接每次只是发送少量的数据,例如:聊天服务器。这时候用NIO处理数据可能是个很好的选择。而如果只有少量的连接,而这些连接每次要发送大量的数据,这时候传统的IO更合适。使用哪种处理数据,需要在数据的响应等待时间和检查缓冲区数据的时间上作比较来权衡选择。

来自:多线程和线程池-多线程的创建和执行
04

Java 如何实现多线程之间的通讯和协作?

可以通过中断和共享变量的方式实现线程间的通讯和协作比如说最经典的生产者-消费者模型:当队列满时,生产者需要等待队列有空间才能继续往里面放入商品,而在等待的期间内,生产者必须释放对临界资源(即队列)的占用权。因为生产者如果不释放对临界资源的占用权,那么消费者就无法消费队列中的商品,就不会让队列有空间,那么生产者就会一直无限等待下去。因此,一般情况下,当队列满时,会让生产者交出对临界资源的占用权,并进入挂起状态。然后等待消费者消费了商品,然后消费者通知生产者队列有空间了。同样地,当队列空时,消费者也必须等待,等待生产者通知它队列中有商品了。这种互相通信的过程就是线程间的协作。Java中线程通信协作的最常见的两种方式:1、syncrhoized加锁的线程的Object类的wait()/notify()/notifyAll()2、ReentrantLock类加锁的线程的Condition类的await()/signal()/signalAll()线程间直接的数据交换:通过管道进行线程间通信:1)字节流;2)字符流

来自:多线程和线程池-多线程的创建和执行
课程
专栏
java语言-多线程和线程池-多线程的创建和执行
3专栏
1课程
4 试题