线程- 是操作系统能够进行运算调度的最小单位。它被包含在进程之中,是进程的实际运作单位,一个进程中可以并发多个线程,每条线程并行执行不同的任务。
线程主要是继承Thread类,重写run()方法,实现Runable接口实现run()方法来实现线程的。
一个核最多能发出两个线程。
Java使用关键字synchronized来执行线程的互斥,即线程同步。
阻塞:就是在执行IO操作获取数据时,这个IO可能会需要一定时间才能等到数据的返回,然后才能执行下面的命令,没有充分利用CPU资源。相当于是顺序执行程序。
非阻塞:线程在进行IO操作时,无需等待数据的返回就可以继续执行下面的命令,充分利用CPU资源。
如果程序是单线程的情况下,在接着执行下面的代码的过程中需要额外不断的轮询查看这个IO请求的数据是否返回。使用多线程则一个线程等待数据返回另一个线程继续读操作执行下面的代码。
同步:是指当线程进行IO请求时,是你主动关心数据的返回。
异步:是当前程序无需主动关心数据的返回,当数据返回时会有相关的事件通知。
并行:当两个或者多个事件在同一时刻发生。(你吃饭的时候,电话来了,你停下来接了电话,接完电话后再吃饭)
并发:是指两个或多个事件在同一时间间隔发生。(你打电话问书店是否有某本书,如果是同步机制,书店老板会说稍等,“我查下”然后开始查查完了告诉你,可能一会儿,可能很久;如果是异步通信机制,书店老板会直接告诉你查好了告诉你,等查询完后打电话给你)