Java实现多线程的几种方式

[toc]

每当看到类似xx的几种实现方式时,脑海里就会浮现出孔乙己用蘸酒的手指在柜台上写“茴”字的画面,很多人都坚持说无论黑猫白猫抓到老鼠就是好猫,在一个项目的初始阶段 ,这种达到基本实现目的的做法无可厚非。但是在项目中期,对某一个技术的多重实现方式的追求就很有必要,在功能达到基本要求之后,我们追求的就是性能,对性能的追求实际上就是对我们脑力的不断考验,通俗地讲,这是一个挤牙膏的过程,可参考牙膏厂。多种实现方式之间可以进行一个性能对比,在保证相同结果的同事,耗费资源少者必然可取。

正是这种对目前技术的不满足和极致的追求,才会让我们这个社会变的更加的美好。

现在计算机硬件性能在绝大多数场景下大有富裕,充分发挥计算机性能,追求更短时间达到目的的代码会让我们在职场上足够亮眼。

这里我们即将开始Java多线程技术之旅,去探索Java多线程的技术原理和实现方式,一起探索高性能编程之道。

1. 基本概念

1.1 Thread类

线程类,每个线程就是一个THread类的实例。

1.2 Runable接口

一个接口,实现Runable接口的时候必须实现run方法,在new Thread()对象的时候可以传入一个实现了Runable接口的任务。

1.3 Callable接口

一个接口,实现Callable接口时必须实现call方法,与Runable的区别就是Callable是可以传递参数的。

1.4 Futuer类

线程执行结果返回对象类,在Future实例获取结果的时候会阻塞线程

1.5 线程池

因为系统在创建是一件耗费比较大的动作,而线程池是为了解决线程复用的问题,让线程可以重复利用,免除频繁的创建换销毁。

在jdk里面也提供了一些常见的默认线程池:

  1. 单线程线程池;
  2. 固定大小线程池;
  3. 带缓存功能的线程池;
  4. 定时任务调度线程池;

1.6 线程的生命周期

2 多线程操作过程中的数据安全

jdk已经提供了的线程安全数据类型:

2.1 jdk提供的集中线程安全的数据类型

2.2 synchronize 关键字

2.3 lock 关键字

2.4 悲观锁与乐观锁

2.5 jdk8提供的并发编程技术

-------------本文结束感谢您的阅读-------------