学习线程之前需要了解两个知识点,一个是进程,一个是线程
java线程的五种状态 Java中线程的五种状态是: 新建(New), 可运行(Runable), 运行(Running), 阻塞(Blocked), 死亡(Dead). 但是Java没有给我们提供直接获取线程死亡状态的方法,因为一旦线程死亡,它的状态信息就会丢失,因为它可能会被垃圾收集器回收。
死亡状态: 线程运行结束后,或者被提前强制结束,那么它就处于死亡状态。

ThreadLocal是Thread的局部变量,是每个线程特有的,其它线程不能对其进行访问,ThreadLocal为解决多线程程序的并发问题提供了一种新的思路。ThreadLocal很容易让人望文生义,想当然地认为是一个“本地线程”。其实,ThreadLocal并不是一个Thread,而是Thread的局部变量,也许把它命名为ThreadLocalVariable更容易让人理解一些。


在Java中,锁(Lock)是一种用于控制多个线程对共享资源的访问的机制。通过锁,可以确保同一时间只有一个线程能够访问某个特定的代码块或资源,从而避免数据的不一致性和其他并发问题。当一个线程想要访问共享资源时,它必须先获取锁。如果锁已经被另一个线程持有,则该线程将被阻塞,直到锁被释放。一旦线程获取了锁,它就可以安全地访问共享资源,而不用担心其他线程会同时访问并导致数据冲突。当线程完成对共享资源的访问后,它必须释放锁,以便其他线程可以使用它。
使用synchronized关键字
synchronized是Java中内置的锁机制,可以修饰方法或者代码块。当一个线程试图进入一个synchronized方法或代码块时,它必须先获得锁。如果锁已经被其他线程持有,则该线程将被阻塞,直到锁被释放。
使用ReentrantLock类
它是一个可重入锁,通过调用lock()和unlock()方法获取和释放锁。与synchronized不同,ReentrantLock提供了更灵活的同步控制,例如可实现公平性和试锁等待时间。
使用wait()、notify()和notifyAll()方法
这些方法是Object类的方法,允许线程间进行协作和通信。通过调用wait()方法使线程进入等待状态,然后其他线程可以通过notify()或notifyAll()方法唤醒等待的线程。
使用CountDownLatch和CyclicBarrier
它们是并发工具类,用于线程之间的同步和等待。CountDownLatch可用于等待一组线程完成操作,而CyclicBarrier用于等待一组线程互相达到屏障位置。

线程池顾名思义就是用来存放线程的池子,用来管理和复用线程。由于频繁的创建和销毁线程,比较耗费资源,为减少开销,所以出现了线程池。线程池可以有效的管理其中线程的生命周期、调度和执行。可以动态的给其中的线程分配任务去执行。
线程池主要分为以下几类:
主要的参数
ThreadFactory threadFactory = new ThreadFactoryBuilder().setNameFormat("mythread-pool-").build();


以上图片内容来自ProcessOn 模板社区,你可以点击此链接查看详情。如果你想要将自己的知识结构化记录下来,ProcessOn 是你的绝佳选择,提供多种专业图形的绘制工具和丰富的模板内容,支持工作、学习和生活各个方面的应用。