大多数并发都是通过任务执行的方式来实现的。 一般有两种方式执行任务:串行和并行。 当然上面的这两种方式都是有问题的。单线程的问题就是并发量会是瓶颈,多线程版本就是无限制的创建线程会导致资源不足问题。 Executor 框架 任务是一组逻辑工作单元,而线程是使任务异步执行的机制。 JDK 提供了 Ex ...
分类:
编程语言 时间:
2019-10-18 19:23:01
阅读次数:
103
线程池参数 创建线程的api corePoolSize 为线程池的基本大小。 maximumPoolSize 为线程池最大线程大小。 keepAliveTime 和 unit 则是线程空闲后的存活时间。 workQueue 用于存放任务的阻塞队列。 handler 当队列和最大线程池都满了之后的饱和 ...
分类:
编程语言 时间:
2019-10-18 18:55:11
阅读次数:
86
(手机横屏看源码更方便) 注:java源码分析部分如无特殊说明均基于 java8 版本。 简介 ThreadPoolExecutor的构造方法是创建线程池的入口,虽然比较简单,但是信息量很大,由此也能引发一系列的问题,同样地,这也是面试中经常被问到的问题,下面彤哥只是列举了一部分关于ThreadPo ...
分类:
编程语言 时间:
2019-10-16 00:02:28
阅读次数:
119
1. 多线程 1.1 多线程介绍 学习多线程之前,我们先要了解几个关于多线程有关的概念。 进程:进程指正在运行的程序。确切的来说,当一个程序进入内存运行,即变成一个进程,进程是处于运行过程中的程序,并且具有一定独立功能。 线程:线程是进程中的一个执行单元,负责当前进程中程序的执行,一个进程中至少有一 ...
分类:
编程语言 时间:
2019-10-11 21:52:34
阅读次数:
88
java中创建线程池的方式一般有两种: 通过Executors工厂方法创建 通过new ThreadPoolExecutor(int corePoolSize, int maximumPoolSize, long keepAliveTime, TimeUnit unit, BlockingQueue ...
分类:
编程语言 时间:
2019-10-11 18:48:36
阅读次数:
272
4. Linux内核级线程与用户级线程 POSIX线程调度是一个混合模型,既支持用户级也支持内核级的线程。在创建线程时对contentionscope属性可设置为: PTHREAD_SCOPE_PROCESS。它表示新创建的线程与它所在的进程中的其他线程竞争处理器资源,等同用户级线程。 PTHREA ...
分类:
编程语言 时间:
2019-10-11 12:51:26
阅读次数:
111
1.通过全局变量方式 mfcDlg.cpp 如果要在1.cpp中使用g_num,需要在mfcDlg.cpp的头文件中声明extern int g_num。1.cpp中要包含mfcDlg.h 2.通过主对话框类的成员变量,在创建线程时传递主对话框类的指针; 3.界面线程间通信。 界面线程创建时,无法传 ...
分类:
编程语言 时间:
2019-10-09 17:22:50
阅读次数:
120
Java并发——线程池Executor框架 线程池 无限制的创建线程 若采用"为每个任务分配一个线程"的方式会存在一些缺陷,尤其是当需要创建大量线程时: 线程生命周期的开销非常高 资源消耗 稳定性 引入线程池 任务是一组逻辑工作单元,线程则是使任务异步执行的机制。当存在大量并发任务时,创建、销毁线程 ...
分类:
编程语言 时间:
2019-10-09 09:43:51
阅读次数:
107
线程池 无限制的创建线程 若采用"为每个任务分配一个线程"的方式会存在一些缺陷,尤其是当需要创建大量线程时: 线程生命周期的开销非常高 资源消耗 稳定性 引入线程池 任务是一组逻辑工作单元,线程则是使任务异步执行的机制。当存在大量并发任务时,创建、销毁线程需要很大的开销,运用线程池可以大大减小开销。 ...
分类:
编程语言 时间:
2019-10-08 19:12:51
阅读次数:
91
1 public class CreateThread { 2 public static void main(String[] args) { 3 // 1.使用lambda表达式直接实现Runnable接口中的run()方法 4 Thread thread = new Thread(() -> ... ...
分类:
编程语言 时间:
2019-10-07 23:05:17
阅读次数:
155