【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执行器框架

参考:

Java线程同步与实现

posted @ 2019-12-25 17:50  cac2020  阅读(355)  评论(0编辑  收藏  举报