1.同步、异步
指的是方法的调用。执行了同步方法的调用后,调用者必须等待同步方法返回后,才可以继续后续的执行。
执行了异步方法的调用后,调用会立即返回,调用者可以继续执行后续操作。
2.进程和线程的区别
程序是指令集,静态概念
进程是操作系统调度程序,程序的一次动态执行。动态概念。有三部分组成:cpu,data,code.资源分配的单位
线程是进程中的多条执行路径。线程是进程中的一个实体。调度和执行的单位。一个进程中可能有一个或多个线程。
线程共享进程的地址空间和其他资源
3.死锁,饥饿,活锁
死锁:相互等待
饥饿;低优先级的线程和高优先级的线程强资源,由于得不到资源,而长时间得不到执行
活锁:相互谦让让出资源。线程1,2均需要资源A,B。线程1拥有资源A,线程2拥有资源B。线程1让出资源A,线程2让出资源B。。
导致没有任何一个线程可以同时拥有所有资源而得到执行。
死锁的四个必要条件:
互斥:同一资源同一个时刻只能有一个线程访问。
请求和保持:一个线程在请求其他资源时,不释放已经获得的资源
不可剥夺:一个线程在未执行完前,不可以剥夺他已获得的资源。
循环等待:多个线程间形成头尾相连的循环等待资源关系。
避免死锁的办法:
指定资源的获取顺序
4.你是如何调用 wait()方法的?使用 if 块还是循环?为什么?
答:wait() 方法应该在循环调用,因为当线程获取到 CPU 开始执行的时候,其他条件可能还没有满足,所以在处理前,循环检测条件是否满足会更好。
5.线程池的优点:
线程复用:减少线程创建和撤销的开销,一个线程创建后可以多次复用
控制最大并发数:可以根据系统情况,调整线程最大并发数,防止过多的内存消耗
线程管理: