首页 > 编程语言 >Java多线程____Executors线程池的使用和架构原理

Java多线程____Executors线程池的使用和架构原理

时间:2023-09-13 12:38:00浏览次数:37  
标签:execute Java Thread Executors util 线程 import new 多线程


1.线程池API类型

Java多线程____Executors线程池的使用和架构原理_线程池


1.创建一个可重用固定线程数的线程池


package com.frame.base.thread;

import java.util.concurrent.Executors;
import java.util.concurrent.ExecutorService;

/**
 * Java线程:线程池
 * @author Administrator 
 */
public class TestExecutors {
	public static void main(String[] args) {
		// 创建一个可重用固定线程数的线程池,以共享的无界队列方式来运行这些线程,
		ExecutorService executorService = Executors.newFixedThreadPool(2);

		Thread t1 = new TestThread();
		Thread t2 = new TestThread();
		Thread t3 = new TestThread();
		// 将线程放入池中进行执行
		executorService.execute(t1);
		executorService.execute(t2);
		executorService.execute(t3);
		// 关闭线程池
		executorService.shutdown();
	}
}

class TestThread extends Thread {
	@Override
	public void run() {
		System.out.println(Thread.currentThread().getName() + "运行中。。。");
	}
}

1-1.运行结果

Java多线程____Executors线程池的使用和架构原理_线程_02

2.

Java多线程____Executors线程池的使用和架构原理_线程_03

//==========创建自定义线程池

int corePoolSize,//核心线程数--线程池初始化创建的线程数量  
int maximumPoolSize,//最大线程数,线程池中能创建的最大线程数  
long keepAliveTime,//线程存活时间  
TimeUnit unit,//线程存货时间单位  
BlockingQueue<Runnable> workQueue,//一个阻塞队列  

package com.frame.base.thread;

import java.util.concurrent.ArrayBlockingQueue;
import java.util.concurrent.BlockingQueue;
import java.util.concurrent.ThreadPoolExecutor;
import java.util.concurrent.TimeUnit;

/**
 * 自定义线程池
 */
public class MyExecutors {
	public static void main(String[] args) {
		
		/**
		 * 定义一个阻塞队列
		 */
		BlockingQueue<Runnable> blockingQueue = new ArrayBlockingQueue<Runnable>(10);
		/**
		 * 定义一个线程池执行器
		 */
		ThreadPoolExecutor threadPoolExecutor = new ThreadPoolExecutor(2, 3, 60,TimeUnit.SECONDS, blockingQueue);
			/**
			 * 创建线程执行
			 */
			Thread t1 = new MyThread();
			Thread t2 = new MyThread();
			Thread t3 = new MyThread();
			// 将线程放入池中进行执行
		threadPoolExecutor.execute(t1);
		threadPoolExecutor.execute(t2);
		threadPoolExecutor.execute(t3);
			// 关闭线程池
			threadPoolExecutor.shutdown();
	}
}

class MyThread extends Thread {
	@Override
	public void run() {
		System.out.println(Thread.currentThread().getName() + "运行中。。。");
		try {
			Thread.sleep(300L);
		} catch (InterruptedException e) {
			e.printStackTrace();
		}
	}
}



//运行 结果

Java多线程____Executors线程池的使用和架构原理_线程_04

//==============线程池架构

Java多线程____Executors线程池的使用和架构原理_线程池_05

标签:execute,Java,Thread,Executors,util,线程,import,new,多线程
From: https://blog.51cto.com/ratelcloud/7454298

相关文章

  • Java网路编程____TCP协议客户端服务器信息交互例子
    packagecom.frame.base.TCP;importjava.io.InputStream;importjava.net.ServerSocket;importjava.net.Socket;publicclassTCPSocketServer{ publicstaticvoidmain(String[]args)throwsException{ /** *启动服务端Soecket注册外放信息交互的端口 */......
  • Java多线程____线程死锁例子
    1:两个任务以相反的顺序申请两个锁,死锁就可能出现2:线程T1获得锁L1,线程T2获得锁L2,然后T1申请获得锁L2,同时T2申请获得锁L1,此时两个线程将要永久阻塞,死锁出现packagecom.zs.test; publicclassDeadLock{ publicstaticStringobjA="objA"; publicstaticStringobjB="ob......
  • Java多线程____生产者与消费者模型
    1.仓库类__:入库和出库的集合 有生产和出货方法packagecom.test.thread;importjava.util.LinkedList;/***@authorAdministrator*仓库类*/publicclassStorage{ //存储集合 privateLinkedList<Object>list=newLinkedList<Object>(); publicvoidruk......
  • Java多线程____线程yield方法介绍
    packagecom.test.thread;publicclassTestYield{ publicstaticvoidmain(String[]args){ TestThreadt1=newTestThread("A_01"); TestThreadt2=newTestThread("B_02"); t1.start(); t2.start(); }}classTestThreadextend......
  • Java多线程____线程状态Join()方法
    代码:packagecom.test.thread;publicclassTestRunnableimplementsRunnable{ @Override publicvoidrun(){ synchronized(this){ for(inti=0;i<10;i++){ System.out.println(Thread.currentThread().getName()); } } } }packagecom......
  • Java多线程____线程状态Sleep()方法
    Sleep():在指定的毫秒数内让当前正在执行的线程休眠调用sleep方法时使当前的线程进入休眠状态(阻塞状态)设定休眠xxxx毫秒数后进入运行状态同步块中的Sleep方法调用不会释放对象锁但调用wait()方法会释放对象的同步锁packagecom.test.thread;publicclassTestRunnableimpleme......
  • Java多线程____线程状态变化
    1.初始化状态 :和其他对象一样线程对象被创建初始化中2.可运行状态:也被称为“可执行状态”。线程对象被创建后,其它线程调用了该对象的start()方法,从而来启动该线程 3. 运行状态(Running) :线程获取CPU权限进行执行。需要注意的是,线程只能从就绪状态进入到运行状态。4.......
  • Java多线程____一个简单的多线程demo
    1.实现runnable接口实现功能性解耦 packagecom.test.thread;publicclassTestRunnableimplementsRunnable{ @Override publicvoidrun(){ for(inti=0;i<20;i++){ System.out.println(Thread.currentThread().getName()); } }}packagecom.test.thre......
  • Java安全架构____RSA加密配置第三方加密库问题_javax.crypto.BadPaddingException: De
    刚要写一个JCE组件是未使用第三方加密库时bug如下javax.crypto.BadPaddingException:Decryptionerroratsun.security.rsa.RSAPadding.unpadV15(UnknownSource)atsun.security.rsa.RSAPadding.unpad(UnknownSource)atcom.sun.crypto.provider.RSACipher.doFinal(RSACipher.j......
  • 异常:java.lang.ClassNotFoundException: org.apache.commons.collections.map.ListOr
    使用JSON,在SERVLET或者STRUTS的ACTION中取得数据时如果会出现异常:Java.lang.NoClassDefFoundError:net/sf/ezmorph/Morpher原因是少了JAR包,造成类找不到还必须有其它几个依赖包:commons-logging-1.0.4.jarcommons-lang-2.3.jarcommons-collections-3.2.jarcommons-beanutils-1......