文章目录创建的三种方法继承Thread类实现Runnable接口实现Callable接口三种创建方式对比Thread常用方法线程安全线程同步同步代码块同步方法Lock锁线程通信(了解)线程池概述创建线程池处理Runnable任务处理Callable任务并发与并行线程的生命周期创建的三种方法继承Thread类继承Thread类重写run方法创建对象对象start启动实现Runnable接口继承Runnable接口重写run方法创建Runnable对象用Thread包裹创建线程对象start启动实现Callable接口这种方式最大的优点可以返回线程执行完毕后的结果。继承Callable接口重写Call方法创建Callable对象用FutureTask包裹用Thread包裹FutureTask对象start启动FutureTask对象get获取返回值三种创建方式对比Thread常用方法线程安全问题描述存在多个线程在同时执行同时访问一个共享资源存在修改该共享资源线程同步加锁让多个线程实现先后依次访问共享资源这样就解决了安全问题。实例方法推荐使用this作为锁对象在银行取钱问题中小红和小明共享一个account对象当小明取钱时小红作为同一个account对象(this),不能取钱保证了相同实例调用方法的互斥不同实例调用方法不互斥静态推荐使用(类名.class)作为锁对象同步代码块对出现问题的核心代码使用synchronized进行加锁每次只能一个线程占锁进入访问同步方法范围上同步代码块锁的范围更小同步方法锁的范围更大。可读性同步方法更好。Lock锁线程通信(了解)线程池概述什么是线程池?线程池就是一个可以复用线程的技术。为什么要使用线程池?用户每发起一个请求后台就需要创建一个新线程来处理下次新任务来了肯定又要创建新线程处理的 而创建新线程的开销是很大的并且请求过多时肯定会产生大量的线程出来这样会严重影响系统的性能。创建线程池ThreadPoolExecutorExecutors大型并发系统环境中使用Executors如果不注意可能会出现系统风险。注意事项:临时队列什么时候开始创建当核心线程在忙并且任务队列已满时什么时候采取abortPolicy?当核心线程在忙并且任务队列已满临时线程也在忙时处理Runnable任务使用ExecutorService的方法voidexecute(Runnable target)处理Callable任务使用ExecutorService的方法Future submit(Callable command)用一个Future对象接收返回的结果并发与并行多线程中并发和并行是同时进行的正在运行的程序软件就是一个独立的进程。线程是属于进程的一个进程中可以同时运行很多个线程。进程中的多个线程其实是并发和并行执行的。并发的含义进程中的线程是由CPU负责调度执行的但CPU能同时处理线程的数量有限为了保证全部线程都能往前执行CPU会轮询为系统的每个线程服务由于CPU切换的速度很快给我们的感觉这些线程在同时执行这就是并发。并行的含义在同一个时刻上同时有多个线程在被CPU调度执行。线程的生命周期NEW,RUNNABLE,BLOCKING,WATING,TIMED_WAITING,TERMINATED