Tsequential是算法串行版的执行时间,而Tconcurrent是算法并行版的执行时
,P是可以进行并行化处理的代码的百分比,而N 是你准备用于执行该算法的计算机的核数。
基本并发类
Thread类
:该类描述了执行并发Java应用程序的所有线程。
Runnable接口
:这是Java中创建并发应用程序的另一种方式。
ThreadLocal类
:该类用于存放从属于某一线程的变量。
ThreadFactory接口
:这是实现Factory
设计模式的基类,你可以用它来创建定制线程。
同步机制:
synchronized
关键字
:synchronized
关键字允许你在某个代码块或者某个完整的方法中定义一个临界段。
Lock
接口
:Lock
提供了比synchronized
关键字更为灵活的同步操作。Lock
接口有多种不同类型:ReentrantLock
用于实现一个可与某种条件相关联的锁;ReentrantReadWriteLock
将读写操作分离开来;StampedLock
是Java 8中增加的一种新特性,它包括三种控制读/写访问的模式。
Semaphore
类
:该类通过实现经典的信号量机制来实现同步。Java支持二进制信号量和一般信号量。
CountDownLatch
类
:该类允许一个任务等待多项操作的结束。
CyclicBarrier
类
:该类允许多线程在某一共同点上进行同步。
Phaser
类
:该类允许你控制那些分割成多个阶段的任务的执行。在所有任务都完成当前阶段之前,任何任务都不能进入下一阶段
执行器
Executor
接口和ExecutorService
接口
:它们包含了所有执行器共有的execute()
方法。
ThreadPoolExecutor
类
:该类允许你获取一个含有线程池的执行器,而且可以定义并行任务的最大数目。
ScheduledThreadPoolExecutor
类
:这是一种特殊的执行器,可以使你在某段延迟之后执行任务或者周期性执行任务。
Executors
:该类使执行器的创建更为容易。
Callable
接口
:这是Runnable
接口的替代接口——可返回值的一个单独的任务。
Future
接口
:该接口包含了一些能获取Callable
接口返回值并且控制其状态的方法
Fork/Join框架
Fork/Join框架定义了一种特殊的执行器,尤其针对采用分治方法进行求解的问题。针对解决这类问题的并发任务,它还提供了一种优化其执行的机制。Fork/Join是为细粒度并行处理量身定制的,因为它的开销非常小,这也是将新任务加入队列中并且按照队列排序执行任务的需要。该框架涉及的主要类和接口如下。
ForkJoinPool
:该类实现了要用于运行任务的执行器。
ForkJoinTask
:这是一个可以在ForkJoinPool
类中执行的任务。
ForkJoinWorkerThread
:这是一个准备在ForkJoinPool
类中执行任务的线
退出一个线程
1程序执行Runtime类的exit()方法,而且用户有权执行该方法
2应用程序的所有非守护线程均已结束执行,无论是否有正在运行的守护线程。
线程状态
NEW
:Thread
对象已经创建,但是还没有开始执行。
RUNNABLE
:Thread
对象正在Java虚拟机中运行。
BLOCKED
:Thread
对象正在等待锁定。
WAITING
:Thread
对象正在等待另一个线程的动作。
TIME_WAITING
:Thread
对象正在等待另一个线程的操作,但是有时间限制。
THREAD
:Thread
对象已经完成了执行。
Thread对象的信息
interuptt 不会直接中断线程 会中断sleep 并且设置interrupted 为true
join
可以控制一定数量的并发线程数, 例如在main函数中 控制一定时间(达到了多少数量的线程) 就对这些线程join 只有在这些线程并发执行结束后 才会继续走main 函数(再执行其他的线程)
控制线程数: 每个单位一个线程 / 每几个单位(一组)一个线程 / 每一个核心数一个线程:Runtime.getRuntime().availableProcessors()