JUC学习笔记1

121 阅读3分钟

1、为什么多线程极其重要?

硬件方面:摩尔定律失效

摩尔定律: 当价格不变时候,集成电路上可容纳的元器件的数目约每隔18-24个月便会增加一倍,性能也将提升一倍。

可是从2003年开始CPU主频已经不再翻倍,而是采用多核而不是更快的主频。 在主频不再提高且核数不断增加的情况下,要想让程序更快就要用到并行或者并发编程

软件方面:高并发系统,异步回调等生产需求

2、java多线程相关概念

进程: 是程序的一次执行,是系统进行资源分配和调度的独立单位,每个进程都有它自己的内存和系统资源。

线程: 是同一个进程内又可以执行多个任务,而这每一个任务可以看做是一个线程,一个进程会有1个或者多个线程。

面试题:何为进程和线程?

1、计算机的核心是CPU,它承担了所有的计算任务。它就像一座工厂,时刻在运行。

2、单个CPU一次只能运行一个任务,进程代表CPU所能处理的单个任务。

3、任意时刻,CPU总是运行一个进程,其他进程处于非运行状态。

4、一个进程可以包括多个线程,一个进程的内存空间是共享的,每个线程都可以使用这些共享内存。

5、一个线程使用某些共享内存时,其他线程必须等它结束,才能使用这块内存。

6、可以通过互斥锁来防止多个线程同时读取某一块内存区域。

7、某些内存区域只能够提供给固定数目的线程使用(信号量(Semphore)、线程池)

8、信号量(Semaphore),有时被称为信号灯,是在多线程环境下使用的一种设施, 它负责协调各个线程, 以保证它们能够正确、合理的使用公共资源。mutexs是Semaphore的一种特殊情况(n==1时)。

9、操作系统的设计,因此可以归结为三点:(1)以多进程形式,允许多个任务同时运行;(2)以多线程形式,允许单个任务分成不同的部分运行;(3)提供协调机制,一方面防止进程之间和线程之间产生冲突,另一方面允许进程之间和线程之间共享资源。

管程(Monitor) Monitor其实是一种同步机制,它的义务是保证(同一时间)只有一个线程可以访问被保护的数据和代码。 JVM中同步是基于进入和退出监视器对象(Monitor,管程对象)来实现的,每个对象实例都会有一个Monitor对象,

Object o = new Object();
new Thread(()-> {
    synchronized (o){

    }
},"t1").start();

Monitor对象会和Java对象一同创建并销毁,它的底层是由C++语言来实现的。

用户线程和守护线程

Java线程分为用户线程和守护线程,线程的daemon属性为true表示是守护线程,false表示是用户线程 守护线程: 是一种特殊的线程,在后台默默地完成一些系统性的服务,比如垃圾回收线程。

用户线程: 是系统的工作线程,它会完成这个程序需要完成的业务操作。

重点: 1、当程序中所有的用户线程执行完毕之后,不管守护线程是否结束,系统都会自动退出。 2、设置守护线程,需要在start()方法之前进行。