线程概述

一、进程与线程

进程是正在运行的程序的实例,线程是程序中一个单一的顺序控制流程。一个进程可以同时运行多个线程,一个线程可以创建和撤消另一个线程。由于线程之间的相互制约,因此线程存在就绪、阻塞、运行三种基本状态。

二、线程状态转换



 

三、阻塞

1、等待阻塞:运行的线程执行wait()方法,JVM会把该线程放入等待池中。

2、同步阻塞:运行的线程在获取对象的同步锁时,若该同步锁被别的线程占用,则JVM会把该线程放入锁池中。

3、其他阻塞:运行的线程执行sleep()或join()方法,或者发出了I/O请求时,JVM会把该线程置为阻塞状态。当sleep()状态超时、join()等待线程终止或者超时、或者I/O处理完毕时,线程重新转入就绪状态。

四、同步

7种同步方法:http://www.cnblogs.com/XHJT/p/3897440.html

五、Runnabl实现线程

 

 

六、Thread实现线程

 

 

 七、CountDownLatch同步工具

CountDownLatch是一个同步计数器类,在完成一组正在其他线程中执行的操作之前,它允许一个或多个线程一直等待。构造这个类的时候传入int参数,该参数是计数器的初始值,每调用一次countDown()方法,计数器就减1,计数器大于0时,await()方法会阻塞程序继续执行,让主程序等待子程序的结束。

 

主要方法

public CountDownLatch(int count);

public void countDown();

public void await() throws InterruptedException



 

八、Spring线程池ThreadPoolTaskExecutor

<!-- spring thread pool executor -->           
<bean id="taskExecutor" class="org.springframework.scheduling.concurrent.ThreadPoolTaskExecutor">
	<!-- 线程池维护线程的最少数量 -->
	<property name="corePoolSize" value="5" />
	<!-- 允许的空闲时间 -->
	<property name="keepAliveSeconds" value="200" />
	<!-- 线程池维护线程的最大数量 -->
	<property name="maxPoolSize" value="10" />
	<!-- 缓存队列 -->
	<property name="queueCapacity" value="20" />
	<!-- 对拒绝task的处理策略 ThreadPoolExecutor.CallerRunsPolicy策略 ,调用者的线程会执行该任务,如果执行器已关闭,则丢弃.-->
	<property name="rejectedExecutionHandler">
		<bean class="java.util.concurrent.ThreadPoolExecutor$CallerRunsPolicy" />
	</property>
</bean>

 四种策略

ThreadPoolExecutor.AbortPolicy()  抛出java.util.concurrent.RejectedExecutionException异常 
ThreadPoolExecutor.CallerRunsPolicy() 重试添加当前的任务,他会自动重复调用execute()方法 
ThreadPoolExecutor.DiscardOldestPolicy() 抛弃旧的任务 
ThreadPoolExecutor.DiscardPolicy() 抛弃当前的任务 

 

线程池应用:昨晚给的链接,早上看了下,不是很对,今天重新整理一份补上。

 

 

猜你喜欢

转载自klts.iteye.com/blog/2387129