前面四篇文章已经把基本的Java多线程编程的知识介绍完了,下面介绍下其余的一些线程编程技巧,包括
如何包装线程不安全的集合类
使用ThreadLocal线程本地变量
使用concurrent包下线程安全的集合类
使用原子类编程处理并发问题
使用final关键字处理并发问题
我们知道,在Java中启动一个线程是需要一定的资源成本的,使用线程池可以有效的控制系统中线程并发的数量,降低资源的消耗,提高线程的响应速度。
线程池的设计属于享元模式的一种实现。
创建一个线程池我们主要用到java.util.concurrent包下的ThreadPoolExecutor类和它的子类ScheduledThreadPoolExecutor。
在并发的情况下,多个线程一起访问同一个资源时会出现线程同步的问题。
很多程序的bug都是由于线程不同步而造成的,解决线程不同步的方法最常用的是使用Java的锁机制对代码进行加锁,而加锁的方法不同和加锁的范围不同又分几种情况。除此之外还可以使用特殊域变量(volatile)实现线程同步。
那么在什么时候需要用到线程同步呢?前面说了,多个线程访问同一个资源的时候就需要对代码进行同步操作了。
比如对文件的读写操作,多个线程同时对某个变量进行修改,对数据库的增删改查的访问等等。
本文是Java多线程第二篇,关于线程声明周期的几个状态和状态之间的转换
操作系统同时运行着多个任务,每一个任务就是一段内存中运行的程序,也叫进程。而这个运行的程序又可能包含多个同时执行的程序片段,这每一个执行程序片段的过程就叫线程。
多线程就是程序利用进程空闲时间不停地在各个线程之间进行切换,已达到多个程序片段同时进行的效果的过程,也就是多个线程同时执行。
其实线程的概念跟进程很类似,据不可靠消息来源,因为当年苹果计算机的操作系统是单进程操作系统,Java需要实现跨平台的并发程序,所以抽象出了线程的概念。
Java多线程一共五篇,包括线程创建、线程生命周期、线程锁、线程池和线程安全,仅以此文纪念那篇的很水毕业论文。