【Java并发专题之四】Java并发编程实现
本章做一下总览各种并发的实现方式,传统方式比较常见,在大并发场景下一般会使用JUC并发包,下面列了一张juc包概览图,每一类会在后面文章中详细介绍原理和使用。
一、传统的java线程并发支持
1、线程同步使用synchronized
2、线程通信使用wait、notify、notifyAll、join、yield、sleep
3、变量内存可见使用volate
4、ThreadLocal封装非线程安全类
ThreadLocal是一种把变量放到线程本地的方式来实现线程同步的。比如:SimpleDateFormat不是一个线程安全的类,可以使用ThreadLocal实现同步,如下:
public class ThreadLocalTest { private static ThreadLocal<SimpleDateFormat> dateFormatThreadLocal = new ThreadLocal<SimpleDateFormat>() { @Override protected SimpleDateFormat initialValue() { return new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); } }; public static void main(String[] args) { Thread thread1 = new Thread(new Runnable() { @Override public void run() { Date date = new Date(); System.out.println(dateFormatThreadLocal.get().format(date)); } }); Thread thread2 = new Thread(new Runnable() { @Override public void run() { Date date = new Date(); System.out.println(dateFormatThreadLocal.get().format(date)); } }); thread1.start(); thread2.start(); } }
ThreadLocal与同步机制的对比选择:
ThreadLocal与同步机制都是 为了解决多线程中相同变量的访问冲突问题。
前者采用以 "空间换时间" 的方法,后者采用以 "时间换空间" 的方式。
二、为了更好的支持高并发任务,让开发者进行多线程编程时有效减少竞争条件和死锁线程,Java5提供了java.util.concurrent(JUC)包。
JUC按照功能可以大致划分如下:
juc-locks锁框架 juc-atomic原子类框架 juc-sync同步器框架 juc-collections集合框架 juc-executors执行器框架
参考:
学习技术不是用来写HelloWorld和Demo的,而是要用来解决线上系统的真实问题的.