一、 概念:
1.1 简述:
1.2 为什么会使用到多线程
1. 如果是单线程模式,我们在进行一个需要很长时间处理的程序时,其他程序只能等待该程序执行完毕之后才能继续。这个时候比如我们耗时长的程序是进行视频的转码等操作的时候,我们可以使用新的线程处理这个操作,那么我们就可以在其转码期间做其他的事情了,以此来提高系统的使用率。
2.一般我们接触的cpu基本属于多核心的,使用多线程可以增加cpu的利用率。
3. 对于用户的并发请求,我们可以同时进行。
4. 对于简单重复的程序进行重复执行的时候,使用多线程的情况下,可以提高响应速度(爬虫)。
二、线程有哪些基本状态?
![](https://i-blog.csdnimg.cn/blog_migrate/8ffe00e3b03203d8c29a9b6a9f8f5484.png)
三、线程安全
概念: 在程序处理过程中,多个线程同时操作主内存中的共享资源(最为常见为变量)这会导致线程安全问题。主要是靠锁进行处理这一安全性问题。
解决方案:
1. 互斥同步(阻塞同步)
此方法主要用于对同一资源进行加锁操作,对于成功上锁的线程进行处理,对于未获取到锁的线程进行阻塞等待过程
synchronized vs ReentrantLock
2. 非阻塞同步
cas (AtomicInteger Atomicxxxxx)
3. 无同步方案
主要是将公共的资源进行拆分,从而将共享的资源变成可以作为线程私有的资源,只被当前的线程独立享有的情况,比如ThreadLocal进行数据库连接信息切换等情况。(简单的比如自己玩的时候,譬如爬虫我们规定最大的线程数为3 查出来的数据有12页,那么就每个线程分配4个页面的数据进行爬取就好了)