一篇文章搞定Java多线程和高并发问题
进程是操作系统进行资源分配的最小单元,线程是操作系统进行运算调度的最小单元是线程,其实,在Linux中线程也可以看作是一种轻量级的进程,那么线程是包含于进程之中的,是进程中实际的运作单位;同一进程中的多个线程共用同一块内存空间,而不同的线程又拥有独立的栈内存用以存放线程本地数据。
现在的计算机动辄就是多处理器核心的,而每一个线程同一时间只能运行在一个处理器上,那么如果程序采用单线程进行开发,那么就不能充分利用多核处理器带来的优势;所以为了充分利用多核处理器的资源来提高程序的执行性能,多线程编程变得越来越重要,比如对于计算密集型任务,使用一个线程可能需要100秒,但是,如果使用十个线程共同完成,那么需要的时间可能只有10秒左右;如果你是使用Java开发程序的,那么你很幸运,因为Java是内置多线程编程模型的;但是,想要使用好多线程这把利刃,还需要掌握好多线程编程的基础知识,从而做到得心应手地使用多线程进行高性能程序的开发!
多线程的使用场景:
- 程序中出现需要等待的操作,比如网络操作、文件IO等,可以利用多线程充分使用处理器资源,而不会阻塞程序中其他任务的执行;
- 程序中出现可分解的大任务,比如耗时较长的计算任务,可以利用多线程来共同完成任务,缩短运算时间
- 程序中出现需要后台运行的任务,比如一些监测任务、定时任务,可以利用多线程来完成
线程的实现方式:
- 继承Thread类
- 实现Runnable接口
- 实现Callable接口
线程的状态转换:
线程池
JDK1.5之后,提供了线程的线程池,Java里面线程池的*接口是Executor,是一个执行线程的工具,线程池的接口是ExecutorService.
Executor接口执行已提交的Runnable任务的对象。ExecutorService接口,提供了管理终止的方法,以及可为跟踪一个或多个异步任务执行而生成的Future的方法。
Java高并发
同步就是一件事,一件事情一件事的做。
异步就是,做一件事情,不引响做其他事情。
并发编程