3 绝圣弃智-零

尚未进行身份认证

我要认证

暂无相关简介

等级
TA的排名 4k+

多线程 ForkJoinPool

背景ForkJoinPool的优势在于,可以充分利用多cpu,多核cpu的优势,把一个任务拆分成多个“小任务”,把多个“小任务”放到多个处理器核心上并行执行;当多个“小任务”执行完成之后,再将这些执行结果合并起来即可。这种思想值得学习。使用Java7 提供了ForkJoinPool来支持将一个任务拆分成多个“小任务”并行计算,再把多个“小任务”的结果合并成总的计算结果。ForkJoinPool是ExecutorService的实现类,因此是一种特殊的线程池。使用方法:创建了ForkJoi

2020-06-04 22:10:05

线程池之ScheduledThreadPoolExecutor

1. ScheduledThreadPoolExecutor简介ScheduledThreadPoolExecutor可以用来在给定延时后执行异步任务或者周期性执行任务,相对于任务调度的Timer来说,其功能更加强大,Timer只能使用一个后台线程执行任务,而ScheduledThreadPoolExecutor则可以通过构造函数来指定后台线程的个数。ScheduledThreadPoolExecutor类的UML图如下:ScheduledThreadPoolExecutor类的UML图..

2020-06-04 21:59:43

为什么阿里Java规约禁止使用Java内置Executors创建线程池?

IDEA导入阿里规约插件,当你这样写代码时,插件就会自动监测出来,并给你红线提醒。告诉你手动创建线程池,效果会更好。在探秘原因之前我们要先了解一下线程池 ThreadPoolExecutor 都有哪些参数及其意义。ThreadPoolExecutor构造方法:public ThreadPoolExecutor(int corePoolSize, int maximumPoolSize, .

2020-06-04 20:52:05

Java并发编程:线程池的源码分析和使用实例

Java并发编程:线程池的使用  我们使用线程的时候就去创建一个线程,这样实现起来非常简便,但是就会有一个问题:  如果并发的线程数量很多,并且每个线程都是执行一个时间很短的任务就结束了,这样频繁创建线程就会大大降低系统的效率,因为频繁创建线程和销毁线程需要时间。  那么有没有一种办法使得线程可以复用,就是执行完一个任务,并不被销毁,而是可以继续执行其他的任务?  在Java中可以通过线程池来达到这样的效果。今天我们就来详细讲解一下Java的线程池,首先我们从最核心的ThreadPoolEx

2020-06-04 17:48:32

java创建线程实例

找到一篇介绍创建线程的方法的文章,在此记录下.1.继承Thread类2.实现Runnable接口(上述两种方法既可以显式创建类,也可以使用匿名内部类)3.使用FutureTask4.使用TimerTask5.java8 parallelStream()6.线程池7.Spring @EnableAsync 和@Async注解以下为实例代码(不包括6,7的实现):package com.example.demo.thread;import java.util..

2020-06-04 16:40:09

二叉搜索树的后序遍历序列题解

题目:输入一个整数数组,判断该数组是不是某二叉搜索树的后序遍历结果。如果是则返回true,否则返回false。假设输入的数组的任意两个数字都互不相同。参考以下这颗二叉搜索树: 5 / \ 2 6 / \1 3示例 1:输入: [1,6,3,2,5]输出: false示例 2:输入: [1,3,2,6,5]输出: true提示:数组长度 <= 1000思路:后序遍历,最后一个元素是树的根,右子树不为空,...

2020-06-03 18:42:45

从上到下打印二叉树题解

题目:从上到下打印出二叉树的每个节点,同一层的节点按照从左到右的顺序打印。例如:给定二叉树:[3,9,20,null,null,15,7], 3 / \ 9 20 / \ 15 7返回:[3,9,20,15,7]提示:节点总数 <= 1000思路:层次遍历二叉树代码:/** * Definition for a binary tree node. * public class TreeNode { *...

2020-06-03 16:58:52

使用docker安装mysql,在宿主机上不能连接mysql

拉取mysql镜像:docker pull mysql:tag创建并启动docker容器,docker hub 上的命令是:docker run --name some-mysql -e MYSQL_ROOT_PASSWORD=my-secret-pw -d mysql:tag这是,在容器中是可以连接mysql的,但是在宿主机上连接会出现不能连接的问题。可以尝试docker hub上其他的创建启动命令,或者使用下面的命令:docker run --name some-mysql

2020-06-03 15:25:23

栈的压入、弹出序列题解(java)

题目:输入两个整数序列,第一个序列表示栈的压入顺序,请判断第二个序列是否为该栈的弹出顺序。假设压入栈的所有数字均不相等。例如,序列 {1,2,3,4,5} 是某栈的压栈序列,序列 {4,5,3,2,1} 是该压栈序列对应的一个弹出序列,但 {4,3,5,1,2} 就不可能是该压栈序列的弹出序列。示例 1:输入:pushed = [1,2,3,4,5], popped = [4,5,3,2,1]输出:true解释:我们可以按以下顺序执行:push(1), push(2), push(3.

2020-06-03 14:43:32

Redis线程模型

Redis基于Reactor 模式开发了自己的网络事件处理器: 这个处理器被称为文件事件处理器(file event handler):文件事件处理器使用I/O 多路复用(multiplexing)程序来同时监听多个套接字, 并根据套接字目前执行的任务来为套接字关联不同的事件处理器。 当被监听的套接字准备好执行连接应答(accept)、读取(read)、写入(write)、关闭(close)等操作时, 与操作相对应的文件事件就会产生, 这时文件事件处理器就会调用套接字之前关联好的事件处理器来处理...

2020-06-02 21:52:02

linux下nginx负载均衡例子

一、通过docker安装nginx,并运行容器#拉取镜像docker pull nginx#创建并运行容器docker run -itd --name nginx -p 8080:80 -v /etc/nginx/nginx.conf:/etc/nginx/nginx.conf -d nginx注意:需要提前在/etc下创建nginx目录,并在nginx目录下创建nginx.conf文件,文件中内容要正确,不然docker容器无法启动如:user nginx;worker

2020-06-02 18:07:33

如何修改docker容器内文件

现在很多企业都开始使用docker来部署自己的项目了,使用docker部署项目可以更加高效,那么当我们有需要的时候,怎么修改docker容器内的文件呢?方法一:进入容器修改 步骤一:使用docker run -itd -p 80:80 --name=mynginx nginx:latest命令创建容器。 步骤二:使用docker exec -it 88fae5be9f5b bash命令进入容器,直接和宿主机一样,使用vi命令编辑文件。 注:如果vi命令没有,..

2020-06-02 14:34:18

包含min函数的栈题解

题目:定义栈的数据结构,请在该类型中实现一个能够得到栈的最小元素的 min 函数在该栈中,调用 min、push 及 pop 的时间复杂度都是 O(1)。示例:MinStack minStack = new MinStack();minStack.push(-2);minStack.push(0);minStack.push(-3);minStack.min(); --> 返回 -3.minStack.pop();minStack.top(); --> 返回...

2020-06-01 18:05:23

【Java】 用PriorityQueue实现最大最小堆

PriorityQueue(优先队列),一个基于优先级堆的无界优先级队列。实际上是一个堆(不指定Comparator时默认为最小堆),通过传入自定义的Comparator函数可以实现大顶堆。PriorityQueue<Integer> minHeap =newPriorityQueue<Integer>();//小顶堆,默认容量为11PriorityQueue<Integer> maxHeap =newPriorityQueue<Intege...

2020-06-01 17:39:32

Java 静态代理、Java动态代理、CGLIB动态代理

开篇Java 的代理就是客户类不再直接和委托类打交道, 而是通过一个中间层来访问, 这个中间层就是代理。为啥要这样呢, 是因为使用代理有 2 个优势:可以隐藏委托类的实现 可以实现客户与委托类之间的解耦, 在不修改委托类代码的情况下能够做一些额外的处理我们举个很常见的例子: 工厂会生产很多的玩具, 但是我们买玩具都是到商店买的, 而不是到工厂去买的, 工厂怎么生产我们并不关心, 我们只知道到商店可以买到自己想要的玩具,并且,如果我们需要送人的话商店可以把这些玩具使用礼品盒包装。这个工厂就是委托类

2020-06-01 16:13:10

Java并发编程:CountDownLatch、CyclicBarrier和Semaphore

在java 1.5中,提供了一些非常有用的辅助类来帮助我们进行并发编程,比如CountDownLatch,CyclicBarrier和Semaphore,今天我们就来学习一下这三个辅助类的用法。  以下是本文目录大纲:  一.CountDownLatch用法  二.CyclicBarrier用法  三.Semaphore用法  一.CountDownLatch用法  CountDownLatch类位于java.util.concurrent包下,利用它可以实现类似计数器的功能。比

2020-05-30 16:36:37

顺时针打印矩阵题解

题目:输入一个矩阵,按照从外向里以顺时针的顺序依次打印出每一个数字。示例 1:输入:matrix = [[1,2,3],[4,5,6],[7,8,9]]输出:[1,2,3,6,9,8,7,4,5]示例 2:输入:matrix =[[1,2,3,4],[5,6,7,8],[9,10,11,12]]输出:[1,2,3,4,8,12,11,10,9,5,6,7]限制:0 <= matrix.length <= 1000 <= matrix[i].len...

2020-05-29 20:54:45

Python3 数据结构

列表Python中列表是可变的,这是它区别于字符串和元组的最重要的特点,一句话概括即:列表可以修改,而字符串和元组不能。以下是 Python 中列表的方法:方法 描述 list.append(x) 把一个元素添加到列表的结尾,相当于 a[len(a):] = [x]。 list.extend(L) 通过添加指定列表的所有元素来扩充列表,相当于 a[len(a):] = L。 list.insert(i, x) 在指定位置插入一个元素。第一个参数是准备插入到其前

2020-05-29 19:15:54

scala创建二维数组,获取行数和列数

创建二维数组(在scala worksheet中):import Array._var matrix = ofDim[Int](3,4)var rows = matrix.lengthvar cols = matrix(0).lengthprintln(rows)println(cols)3行4列的矩阵(二维数组)java中:public class Matrix { public static void main(String[] args) { .

2020-05-29 19:12:10

对称二叉树题解

题目:请实现一个函数,用来判断一棵二叉树是不是对称的。如果一棵二叉树和它的镜像一样,那么它是对称的。例如,二叉树[1,2,2,3,4,4,3] 是对称的。1/ \2 2/ \ / \3 4 4 3但是下面这个[1,2,2,null,3,null,3] 则不是镜像对称的:1/ \2 2\ \3 3示例 1:输入:root = [1,2,2,3,4,4,3]输出:true示例 2:...

2020-05-29 18:00:46

查看更多

勋章 我的勋章
  • 持之以恒
    持之以恒
    授予每个自然月内发布4篇或4篇以上原创或翻译IT博文的用户。不积跬步无以至千里,不积小流无以成江海,程序人生的精彩需要坚持不懈地积累!
  • 1024勋章
    1024勋章
    #1024程序员节#活动勋章,当日发布原创博客即可获得
  • 勤写标兵Lv4
    勤写标兵Lv4
    授予每个自然周发布9篇以上(包括9篇)原创IT博文的用户。本勋章将于次周周三上午根据用户上周的博文发布情况由系统自动颁发。