21道并发编程口试题

分享21道并发编程口试题 1.历程和线程尚有协程之间的干系

  历程:运行起来的措施。历程需要占用系统资源(内存,CPU)。历程是最小的系统资源分派单元,只是给线程提供执行情况。 由于一个历程发生一个历程地点空间,且历程地点空间彼此独立,一个历程灭亡,其他历程不会受到影响。

  线程:LWP(light weight process)轻量级历程。线程是最小的执行单元。CPU分派时间轮片的工具。

  协程:coroutine,也叫轻量级线程。 与传统的系统级线程和历程对比,携程最大的优势在于“轻量级”,可以轻松建设上万个而不会导致系统资源衰歇。

2.并发和并行之间的区别

  并发:指统一时间内,宏观上处理惩罚多个任务
  并行:指统一时间内,真正上处理惩罚多个任务

3.Java中多线程实现的方法

  3.1 担任Thread类,重写run要领;

  3.2 实现Runnable接口,重写run要领,实现Runnable接口的实现类的实例工具作为Thread结构函数的target

  3.3 通过Callable和FutureTask建设线程

  3.4 通过线程池建设线程

4.Callable和Future模式   4.1 Callable

    在Java中,建设线程一般有两种方法,一种是担任Thread类,一种是实现Runnable接口。然而,这两种方法的缺点是在线程任务执行竣事后,无法获取执行功效。我们一般只能回收共享变量或共享存储区以及线程通信的方法实现得到任务功效的目标。 不外,Java中,也提供了利用Callable和Future来实现获取任务功效的操纵。Callable用来执行任务,发生功效,而Future用来得到功效。 

    不外,在java中,也提供了利用Callable和Future来实现获取任务功效的操纵。Callable用来执行任务,发生功效,而Future用来得到功效;

@FunctionalInterface public interface Callable<V> { /** * Computes a result, or throws an exception if unable to do so. * * @return computed result * @throws Exception if unable to compute a result */ V call() throws Exception; }   

    Callable和Runnable的区别:

      1.Callable能接管一个泛型,然后在call要领中返回一个这个范例的值,而Runnable的run要领没有返回值;

      2.Callable的call要领可以抛出异常,而Runnable的run要领不会抛出异常;

  4.2 Future

    Future模式的焦点在于:去除了主函数的期待时间,并使得原本需要期待的时间段可以用于处理惩罚其他业务逻辑

    Futrure模式:对付多线程,假如线程A要期待线程B的功效,那么线程A没须要期待B,直到B有功效,可以先拿到一个将来的Future,等B有功效是再取真实的功效。

package com.wn.callable; import java.util.concurrent.*; public class MyCallable implements Callable { @Override public Object call() throws Exception { System.out.println("callable接口中重写的call要领,可以有返回值而且抛出异常!!!"); return "callable"; } //方案二:submit(Callable task) public static void main(String[] args) throws ExecutionException, InterruptedException { MyCallable myCallable = new MyCallable(); //建设一个线程 ExecutorService executorService = Executors.newFixedThreadPool(3); //建设线程执行任务,接管任务功效 Future submit = executorService.submit(myCallable); //接管返回值,get要了解阻塞当前线程 System.out.println(submit.get()); System.out.println("操作线程池执行mycallable,完毕!!!"); //遏制 executorService.shutdown(); } }

  4.3 Future常用要领  

    V get():获取异步执行的功效,假如没有功效可用,此要了解阻塞知道异步计较完成;

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/wsdjff.html