多线程的一些概念

多线程的一些概念

线程池:线程池主要用来解决线程生命周期开销问题和资源不足问题。

•一个比较简单的线程池至少应包含:

  • 线程池管理器:创建、销毁并管理线程池,将工作线程放入线程池中
  • 工作线程:一个可以循环执行任务的线程,在没有任务是进行等待
  • 任务列队:提供一种缓冲机制,将没有处理的任务放在任务列队中
  • 任务接口:每个任务必须实现的接口,主要用来规定任务的入口、任务执行完后的收尾工作、任务的执行状态等,工作线程通过该接口调度任务的执行

代码实现:

class ExecutorThread extends Thread{
	boolean runningFlag=false;
	private Runnable callBackRunnable=null;
	public void setCallBack(Runnable callBack) {
		this.callBack=callBack;
	}
	public synchronized void setRunning(boolean flag) {
		runningFlag=false;
		if (flag) {
			this.notify();
		}
	}
	public synchronized void run() {
		try {
			while(true) {
			if(!runningFlag) {
				this.wait();
			}
			else {
				callBack.run();
				setRunning(false);
			}
		} 
			catch (Exception e) {}
		}
	}
}
public class ThreadPoolExecutor {
private List<ExecutorThread> threads;
public ThreadPoolExecutor(int threadCount) {
	threads=Collections.synchronizedList(new ArrayList<ExecutorThread>());
	for (int i = 1; i <=threadCount; i++) {
		ExecutorThread thread=new ExecutorThread();
		threads.add(thread);
		thread.start();
	}
}
public void execute(Runnable callBack) {
	int i;
	for ( i = 0; i < threads.size(); i++) {
		ExecutorThread currenyThread=threads.get(i);
		if (!currenyThread.runningFlag) {
			currenyThread.setCallBack(callBack);
			currenyThread.setRunning(true);
			return;
		}
	}
	if (i==threads.size()) {
		System.out.println("线程资源已用完,请稍等再来申请资源");
	}
}
}

信号量的概念与作用:

信号量,有时被称为信号灯,是在多线程环境下使用的一种设施, 它负责协调各个线程, 以保证它们能够正确、合理的使用公共资源。

生产者-消费者模式:•它描述一块缓冲区作为仓库,生产者可以将产品放入仓库,消费者则可以从仓库中取走产品
在这里插入图片描述

ThreadLocal的作用:

  • ThreadLocal用来解决多线程程序的并发问题
  • ThreadLocal并不是一个Thread,而是Thread的局部变量,当使用ThreadLocal维护变量时,ThreadLocal为每个使用该变量的线程提供独立的变量副本,所以每个线程都可以独立地改变自己的副本,而不会影响其它线程所对应的副本
  • 从线程的角度看,目标变量就象是线程的本地变量,这也是类名中“Local”所要表达的意思

ThreadLocal类中的方法:

  • void set(T value)将此线程局部变量的当前线程副本中的值设置为指定值
  • void remove()移除此线程局部变量当前线程的值
  • protected T initialValue()返回此线程局部变量的当前线程的“初始值”
  • T get()返回此线程局部变量的当前线程副本中的值

原子操作类:从JDK5之后,Java提供了粒度更细、量级更轻,并且在多核处理器具有高性能的原子操作类。因为原子操作类把竞争的范围缩小到单个变量上,这可以算是粒度最细的情况了。原子操作类相当于泛化的volatile变量,能够支持原子读取-修改-写操作。

原子操作类在Java.util.concurrent.atomic包下,可以分为四种类型的原子更新类:

  • 原子更新基本类型
  • 原子更新数组类型
  • 原子更新引用
  • 原子更新属性
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值