线程池 | 学习笔记

简介: 快速学习线程池。

开发者学堂课程【Java 面试疑难点串讲1:面试技巧及语言基础:线程池】学习笔记,与课程紧密联系,让用户快速学习知识。

课程地址:https://developer.aliyun.com/learning/course/24/detail/524


线程池

内容介绍

一、什么叫做线程池

二、线程的执行操作


一、什么叫做线程池

实际上在项目的开发里面对于线程池应用最多的地方就在于数据库的连接池上,如果要想实现线程池,需要使用一个专门的类完成( java.util.concurrent 包): public interface ExecutorService extends Executor

 

二、线程的执行操作

public void execute(Runnable command)

线程执行操作意味着有一个线程对象,则可以通过它进行线程的自动执行。

如果要想取得 ExecutorService 子接口对象,则必须利用java.util.concurrent.Executors

·创建一个无限大小的线程 public static ExecutorService newCachedThreadPool()

·创建有限大小的线程池: public static ExecutorService newFixedThreadPool(int nThreads)

范例:创建一个有限大小的线程池

package cn.mldn.demo;

import java.util.concurrent.ExecutorService;

import java.util.concurrent.Executors;

 

public class TestIODemo {

public static void main(String[ ] args) throws Exception {

ExecutorService service = Executors .newCachedThreadPooL() ; //创建一个无限大小线程池

//此时ExecutorService指的是一个可缓存的线程池,但是没有设置缓存大小;

//如果此时的内容过多,那么可灵活回收空闲的线程,若不回收,则创建新的线程;

for (int x = 0 ; x < 10 ; x ++) {

int myNum = x ;

service.execute( new Runnable() {

@Override

public void run() {

system.out.println(Thread.currentThread().getName() + ",x = " + myNum);

}});

        }

    }

}

范例:创建3个大小的线程池

package cn.mldn.demo;

import java.util.concurrent.ExecutorService;

import java.util.concurrent.Executors;

 

public class TestIODemo {

public static void main(String[ ] args) throws Exception {

ExecutorService service = Executors.newFixedThreadPool(3) ;

//此时ExecutorService指的是一个可缓存的线程池,但是没有设置缓存大小;

//如果此时的内容过多,那么可灵活回收空闲的线程,若不回收,则创建新的线程;

for (int x = 0 ; x < 10 ; x ++) {

int myNum = x ;

service.execute( new Runnable() {

@Override

public void run() {

system.out.println(Thread.currentThread().getName() + ",x = " + myNum);

}});

        }

    }

}

此时由于线程池的空间只能够存放有三个线程的对象,所以这个时候对于不能够保存的线程,将会在队列之中进行等待。

如果不确定到底能放多少个线程池,可直接通过如下操作,能够取得系统可用进程的数量。

System.out.println(Runtime.getRuntime( ).availableProcessors());

 

 

相关文章
|
5月前
|
网络协议 Linux C++
Linux C/C++ 开发(学习笔记十一 ):TCP服务器(并发网络网络编程 一请求一线程)
Linux C/C++ 开发(学习笔记十一 ):TCP服务器(并发网络网络编程 一请求一线程)
99 0
|
2月前
|
调度
多线程学习笔记
这篇文章是多线程学习笔记,涵盖了线程与进程的概念、多线程实现方式、线程状态、线程同步与不安全示例、死锁问题以及生产者与消费者问题等多线程编程的关键知识点。
多线程学习笔记
|
5月前
|
NoSQL 网络协议 关系型数据库
redis-学习笔记(redis 单线程模型)
redis-学习笔记(redis 单线程模型)
49 3
|
5月前
|
安全 Java 编译器
多线程 (下) - 学习笔记2
多线程 (下) - 学习笔记
39 1
|
5月前
|
存储 算法 Java
多线程 (下) - 学习笔记1
多线程 (下) - 学习笔记
42 1
|
5月前
|
设计模式 安全 NoSQL
多线程 (上) - 学习笔记2
多线程 (上) - 学习笔记
42 1
|
5月前
|
Java 数据库连接 程序员
【后台开发】TinyWebser学习笔记(2)线程池、数据库连接池
【后台开发】TinyWebser学习笔记(2)线程池、数据库连接池
56 4
|
5月前
多线程学习笔记(一)
创建线程有3种方式:继承Thread类、实现Runnable接口或Callable接口。继承Thread类时,重写run()方法并调用start()启动线程。实现Runnable接口时,实现run()方法,通过Thread的target创建线程对象并用start()启动。
27 1
|
5月前
|
Java API 调度
多线程 (上) - 学习笔记1
多线程 (上) - 学习笔记
36 0
|
5月前
|
Java C++
多线程学习笔记(二)
1. 子线程先执行:启动子线程后立即调用`join()`,主线程会等待子线程完成。 `suspend()`方法。 3. `synchronized` vs `Lock`:前者是关键字,后者是接口;前者可用在代码块和方法,后者在代码中显式;前者自动释放锁,后者需`finally`释放;前者无超时/中断控制,后者可设定;前者非公平,后者可公平/不公平,且支持读写锁。 4. `synchronized`底层实现:基于 Monitor 模型,JVM层面的锁定机制,通过 monitors 和 monitorenter/monitorexit 指令实现。
23 0